torovaca.java 4.61 KB
Newer Older
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
import java.lang.reflect.Array;
import java.util.Scanner;

public class torovaca {
    public static void main(String[] args) throws InterruptedException {
        
        Scanner sn = new Scanner(System.in);

        int numAdivinar = 0;
        int [] digitos;
        boolean cifrasRepetidas = false;
        
        do {
            numAdivinar= generaNumeroAleatorio(1000,9999);

            digitos= devuelveDigitos(numAdivinar);

            cifrasRepetidas = elementoRepetido(digitos);

        } while(cifrasRepetidas);

         //System.out.println("Ramdon "+numAdivinar);

         boolean fin = false;

         // empieza a jugar
         int intentos=0;
        while (!fin) {

            // el usuario introduce un numero
            System.out.println("Inserte un número: ");
            int numeroUsuario = sn.nextInt();

            
            intentos++;
            System.out.println("Intento nro: "+intentos);

            // Creamos el array de digitos
            int[] digitosUsuario = devuelveDigitos(numeroUsuario);

            // Sino son 4 cifras, volvemos de nuevo a pedir
            if (digitosUsuario.length != 4) {
                System.out.println("Solo numeros de 4 cifras es permitido");
            } else {

                // obtenemos el numero de toros
                int toros = numeroElementosRepetidosMismaPosicion(digitosUsuario, digitos);

                // Obtengo el numero de vacas
                int vacas = numeroElementosRepetidosDistintaPosicion(digitosUsuario, digitos);

                // Muestro lo obtenido
                System.out.println(toros + "Toros " + vacas + "Vacas");

                // Si son 4 toros, hemos ganado
                if(intentos<=12){
                    if(toros == digitos.length ){
                        fin = true;
                        System.out.println("Ha ganado B");
                    }
                }else{
                    fin = true;
                    System.out.println("Ha ganado A");
                }
            }

        }
    }
    // FUNCIONES A USAR

    public static int generaNumeroAleatorio (int minimo, int maximo ){
        int num= (int) Math.floor(Math.random() * (maximo - minimo +1) + (minimo) );
        return num;
    }

    // CONTADOR DE VACAS
    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++){

                if(i!=j && array1[i]==array2[j]){
                    repetidos++;
                }

            }
        }
        return repetidos;
    }
    // CONTADOR DE TOROS
    public static int numeroElementosRepetidosMismaPosicion (int[] array1, int[] array2){
        int repetidos=0;

        for(int i=0; i<array1.length; i++){
            
            if(array1[i]==array2[i]){
                repetidos++;
            }
        }
        return repetidos;
    }

    // ELEMENTOS REPETIDOS
    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;

    }

    /*
    DEVUELVE LOS DIGITOS DE UN NUMERO A UN ARRAY    
    (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 = numero / 10 ;
            numero_solo= numeroInicial - (numero * 10);
            digitos[i] = numero_solo ;
            numeroInicial = numero;
        }
        return invertirArray(digitos);
    }


    // CUENTA EL NUMERO DE CIFRAS DE UN NUMERO
    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;
    }
     

    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;
    }
   
}