Buscar en este blog

Loading...

Monday, February 02, 2009

Numeros aleatorios sin repetición en java.

Este código genera una lista de 5 números entre 0 y 49 sin repetición. Se almacenan en un HashSet. El código se puede modificar para generar x numeros en el rango que se desee:


import java.util.HashSet;

class ListaAleatoria {

public static void main(String args[]) {
HashSet t=new HashSet();

// 5 numeros aleatorios entre 0 y 49 sin repeticion
while (t.size()<5) {
Integer al=new Integer(new java.util.Random().nextInt(50));
t.add(al);
}

java.util.List lista=new java.util.ArrayList(t);
java.util.Collections.sort(lista);

// Se muestran los resultados
java.util.Iterator it=lista.iterator();
while (it.hasNext()) {
System.out.println((Integer)it.next());
}
}

}


La lista última ha sido ordenada para mostrar los numeros en orden ascendente.

12 comments:

  1. genial! me va que ni pintado, pero... no puedo cambiar el rango inferior? que pasa si lo necesito entre 10 y 50?

    ReplyDelete
  2. genial!
    pero: no se puede cambiar el rango inferior a 10 por ejemplo?

    ReplyDelete
  3. Para hacerlo con distintos rangos hay que jugar con la linea del Random.nextInt(50)

    Entre 10 y 50, ¿como sería?, 50-10=40 numeros diferentes pero deben empezar en 10:

    luego sería, 10 + random(41), o sea:

    Integer al=new Integer(10 + java.util.Random().nextInt(41))

    ¿por qué es 41? eso lo dejo para que lo penséis : )

    ReplyDelete
  4. pero si necesito tabjar con los numeros generados no puedo asignarlos a un array no? por ejemplo:
    arrayNumeros =(Integer)it.next()
    eso no funciona...

    ReplyDelete
  5. Puedes convertir un ArrayList a un array en pocos pasos, básate en este código:

    String []strArray = new String[3];
    listArray.toArray(strArray);

    ReplyDelete
  6. Pues no lo consigo:



    package feedback;
    import java.util.HashSet;

    public class primitiva {

    public static void main(String args[]) {
    HashSet t=new HashSet();
    String []strArray = new String[9];


    while (t.size()<9) {
    Integer al=new Integer(10 + new java.util.Random().nextInt(91));
    t.add(al);
    }

    java.util.List lista=new java.util.ArrayList(t);
    java.util.Collections.sort(lista);

    // Se muestran los resultados
    java.util.Iterator it=lista.iterator();
    while (it.hasNext()) {
    System.out.println((Integer)it.next());
    }


    ArrayList.toArray(strArray);



    }
    }

    ReplyDelete
  7. pero tengo problemas para utilizar los objetos guardados en el array! supongo que debo pasar la información guadada a int, pero si lo paso ¿que hago cuando lo paso a XX?

    package feedback;
    import java.util.HashSet;
    import java.util.Scanner;

    public class primitiva {

    public static void main(String args[]) {
    HashSet t=new HashSet();
    String []strArray = new String[9];
    int numero = 0;
    int aciertos = 0;
    //genero los números de una primitiva y los integro en un array
    while (t.size()<9) {
    Integer al=new Integer(10 + new java.util.Random().nextInt(91));
    t.add(al);
    strArray[0] = "" + al;
    strArray[1] = "" + al;
    strArray[2] = "" + al;
    strArray[3] = "" + al;
    strArray[4] = "" + al;
    strArray[5] = "" + al;
    strArray[6] = "" + al;
    strArray[7] = "" + al;
    strArray[8] = "" + al;

    }

    java.util.List lista=new java.util.ArrayList(t);
    java.util.Collections.sort(lista);

    // Se muestran los resultados
    java.util.Iterator it=lista.iterator();
    while (it.hasNext()) {
    System.out.println((Integer)it.next());
    }

    Scanner teclado = new Scanner(System.in);

    do{
    System.out.println("introduce número");
    numero = teclado.nextInt();

    // si escribo uno de los números del aleatorio, este se convierte en XX

    if (numero == strArray[0]){
    strArray[0] = "XX";
    aciertos++;
    }
    if (numero == strArray[1]){
    strArray[1] = "XX";
    aciertos++;
    }

    if (aciertos == 9){
    System.out.println("eres millonario");
    }
    } while (aciertos < 9);



    }

    }

    ReplyDelete
  8. una pregunta, cómo puedo hacer si solo quiero que se repita dos veces cada número

    ReplyDelete
  9. HOLA!una pregunta... como puedo modificar el codigo para que solo me repita los numeros desde 0 2 veces! ose que cuando los escoja aletoriamente siempre me saque parejas iguales; estoy armando un memorama

    ReplyDelete
  10. una pregunta, cómo puedo hacer si solo quiero que se repita dos veces cada número

    ReplyDelete
  11. Hola Fernanda,

    En ese caso se me ocurre utilizar un ArrayList o un Vector, porque Hashset no admite repeticiones.

    El pseudocódigo sería:

    1. Generar nuevo numero aleatorio
    2. Hacer un recuento de cuantas veces está el número en el la Lista. Si es mas de 2 saltar al paso 1. Si no, añadirlo a la lista.

    ¿Te atreves a programarlo?

    Un saludo.

    ReplyDelete