Ayuda!!! comparar que no se repita ningun numero en el array (Java)

Iniciado por afrocardo, 2 Abril 2016, 12:00 PM

0 Miembros y 1 Visitante están viendo este tema.

afrocardo

Buenas,

Vamos a ver, tengo que hacer el juego del bingo en Java.Ya lo tengo casi hecho.Pero,en el modulo jugar tengo un problema.No se como hacer para que los numeros que vaya sacando no se repitan en el array.Tengo idea de que es con un for.Pero no se hacerlo me podiais ayudar.

Este es mi modulo jugar:

while (!VerSiFin()) {
         //Generar numero aleatorio
         numAleatorio=(int) (Math.random()*90+1);
         //Llamada al modulo resolver
         resolver(numAleatorio);
         //Llamada al modulo mostrar
         mostrar();
         //Ahora debo hacer un for para que comparar que no se repita un numero
      }

LaiaxanIV

#1
Hola! Puedes hacer un array de 91 posiciones e ir comparando.

int rnum;
          int rnum;
           int cont = 0;
           int[] repetidos = new int [90];
           for(int i = 0; i < 90; ++i){
               repetidos[i] = 0;
           }
            while(cont<90){
                rnum = (int) (Math.random()*90 +1);
                System.out.println(rnum);
                if(repetidos[rnum-1]== 0){
                    repetidos[rnum-1]=1;
                    ++cont;
                }
                }
            }


Habia puesto 100 porque creía que había 100 posiciones y que el 0 estaba :P. Te modificio el código para que sea correcto

afrocardo

Vale,gracias.Lo probarè y si tengo una dudo le pregunto.

LaiaxanIV

Échale un vistazo a mi mensaje anterior que lo he modificado. Lo que tiene no conocer las reglas del bingo :P

afrocardo

public void jugar() {
      // Declaro una variable aleatoria

      int[] vectoraleatorios = new int[90];
      int numAleatorio=0 ;
      int contador = 0;
      // For para recorrer el tablero
      while (!VerSiFin()) {
         //Generar numero aleatorio
         numAleatorio=(int) (Math.random()*90+1);
         //Llamada al modulo resolver
         resolver(numAleatorio);
         //Llamada al modulo mostrar
         mostrar();
         //Ahora debo hacer un for para que comparar que no se repita un numero
         
      }

Esto era lo que me faltaba por copiar,la parte de arriba.
         

esjuleta

Una forma puede ser crear un array de enteros del 1 al 90 y después cambiar aleatóriamente la posición de cada elemento. Una vez el array esté listo, ya puedes ir mostrando a los jugadores el contenido del array empezando desde la posición 0. Además, el mismo array te servirá luego para comprobar los números de quien cante línea o bingo.

Una posible implementación:



int[] array = new int[90];
llenarArray();
mezclarArray();

llenarArray(){
for(int i = 0; i < array.length; i++){
    array[i] = i + 1;
  }
}

mezclarArray(){
  int posicionCambio = 0;
  int elementoCambio = 0;
  for(int i = 0; i < array.length; i++){
    posicionCambio = (int) (Math.random() * 90);
    elementoCambio = array[posicionCambio];
    array[posicionCambio] = array[i];
    array[i] = elementoCambio;
  }
}



Saludos.