Torosyvacas.java 5.27 KB
Newer Older
Javier Ferreira committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package torosyvacas;

import java.util.Scanner;

/**
 *
 * @author user
 */
public class Torosyvacas {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
    
    Scanner jf= new Scanner (System.in);
    int numAdivinar =0;
    int [] digitos;
    boolean cifrasRepetidas= false;
    
    
    
    do{
    
      
        
        numAdivinar= generaNumeroAleatorio(1000, 9999);// Indica todos las combinaciones posibles de 4 cifras
        
        digitos= devuelveDigitos(numAdivinar);
        
        cifrasRepetidas= elementoRepetido(digitos);// si exiten digitos repetidos
        
        
       } while(cifrasRepetidas);
    
        System.out.print(numAdivinar);
    
    boolean fin = false; // indica cuando acaba el juego
    
    
    while(!fin){
        
        System.out.println("Inserte un numero jugador ");
        int numeroUsuario= jf.nextInt();
        int[]digitosusuario= devuelveDigitos(numeroUsuario);
        
        if(digitosusuario.length != 4){
            System.out.println("Solo numero de 4 cifras jugador B ");
        
        }else{
            int toros= numeroElementosRepetidosMismaPosicion(digitosusuario, digitos); // cuantos numeros coinciden
            int vacas= numeroElementosRepetidosDistintaPosicion(digitosusuario, digitos);
            
            System.out.println("INTENTO B "+toros+"T"+vacas+"V");
        if(toros==digitos.length){
            fin= true;
            System.out.println(" FIN DEL JUEGO GANO B");
        }
        }
    }
    
    
    }
    //Funciones 
    //Funcion para generar numero aleatorio 
    public static int generaNumeroAleatorio(int minimo, int maximo){
         
        int num=(int)Math.floor(Math.random()*(minimo-(maximo+1))+(maximo+1));
        return num;   
        }
    
     public static boolean elementoRepetido(int[] array) {

        // Recorremos el array la 1º vez
        for (int i = 0; i < array.length; i++) {

            // Recorremos el mismo array
            for (int j = i + 1; j < array.length; j++) {
                // Si coincide significa que hay un elemento repetido
                if (array[i] == array[j]) {
                    return true;
                }
            }

        }

        // No hay un elemento repetido
        return false;

    }
     public static int numeroElementosRepetidosDistintaPosicion(int[] array1, int[] array2) {

        int repetidos = 0;
        for (int i = 0; i < array1.length; i++) {

            for (int j = 0; j < array2.length; j++) {
                // Sino es la misma posicion y son igaules, aumento los repetidos
                if (i != j && array1[i] == array2[j]) {
                    repetidos++;
                }
            }
        }
        return repetidos;
    }

    /**
     * Indico cuando elementos repetidos hay en dos arrays. Solo arrays con la
     * misma longitud y en la misma posicion.
     *
     * @param array1 Primer array
     * @param array2 Segundo array
     * @return Numero de repeticiones en ambos arrays. Devuelve -1 en caso de
     * que sean de logitudes diferentes
     */
    public static int numeroElementosRepetidosMismaPosicion(int[] array1, int[] array2) {

        // Si son de diferentes longitudes, devuelvo -1
        if (array1.length != array2.length) {
            return -1;
        }

        int repetidos = 0;

        for (int i = 0; i < array1.length; i++) {
            // Si son iguales, aumento los repetidos
            if (array1[i] == array2[i]) {
                repetidos++;
            }
        }

        return repetidos;

    }
    
     /**
     * Devuelve los digitos de un numero en un array
     *
     * @param numeroInicial Numero al que extraer los digitos
     * @return Array con cada uno de los digitos
     */
    public static int[] devuelveDigitos(int numeroInicial) {

        int numero = numeroInicial;

        int digitos[] = new int[cuentaCifras(numeroInicial)];
        int numero_solo;

        for (int i = 0; numeroInicial > 0; i++) {
            numero /= 10;
            numero_solo = numeroInicial - (numero * 10);
            digitos[i] = numero_solo;
            numeroInicial = numero;
        }
        return invertirArray(digitos);

    }
    
    
    
    
    
    
    
     //* Cuenta el numero de cifras de un numero
     //*
     /* @param num Número a contrar
     * @return numero de cifras
     */
   
    public static int cuentaCifras(int num) {

        int contador = 0;

        if (num == 0) {
            contador = 1;
        } else {

            for (int i = Math.abs(num); i > 0; i/=10) {
                contador++;
            }

        }

        return contador;
    }
    /**
     * Invierte los datos de un array
     *
     * @param array Array que contiene los datos
     * @return Devuelve un nuevo array con los datos invertidos
     */
    public static int[] invertirArray(int array[]) {

        int temp[] = new int[array.length];

        for (int i = temp.length - 1, j = 0; i >= 0; i--, j++) {
            temp[i] = array[j];
        }

        return temp;
    }
    
    
    
}