Ver Mensaje Individual
  #6 (permalink)  
Antiguo 15/10/2009, 02:53
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: Rellenar array con numeros aleatorios y sin repetir

Hola,

Cita:
Iniciado por getNombre Ver Mensaje
mmm bueno.. hoy estuve buscando la manera de general 5 numeros aleatorios sin repeticion con numeros entre el 0 al 9..
Según lo que indica GreenEyed lo más aconsejable es usar las librerías que tiene incorporadas el lenguaje, lo cual tiene sus ventajas, pero también existe el caso que al usar esas librerías nunca comprendamos como fueron hechas.

Código Java:
Ver original
  1. package org;
  2.  
  3. public class Random1 {
  4.  
  5.     private static final int MAXVAL = 100;
  6.     private Integer[] result;
  7.    
  8.     public static void main(String[] args) {
  9.         new Random1().run();
  10.     }
  11.  
  12.     public void run() {
  13.         java.util.LinkedList<Integer> l = new java.util.LinkedList<Integer>();
  14.         for (int i = 0; i < MAXVAL; l.add(++i));
  15.         java.util.Collections.shuffle(l);
  16.         result = l.toArray(new Integer[0]);
  17.         for (Integer i : result) System.out.println(i);
  18.     }
  19.    
  20. }

Y aunque tu aplicación funciona muy bien, podrías haberla simplificado moviendo solamente el último número, no era necesario que movieras todo el array. También dejo una versión diferente sin Collections en el caso sea útil para alguien mas.

Código Java:
Ver original
  1. package org;
  2.  
  3. public class Random2 {
  4.  
  5.     private static final int MAXVAL = 10;
  6.     private static final java.util.Random r = new java.util.Random();
  7.    
  8.     private Integer[] values = new Integer[MAXVAL];
  9.     private Integer[] result = new Integer[MAXVAL];
  10.    
  11.     public static void main(String[] args) {
  12.         new Random2().run();
  13.     }
  14.  
  15.     public void run() {
  16.         int i = 0, j = 0, k = 0;
  17.         while ((values[i++] = i) < MAXVAL);
  18.         i = MAXVAL - 1;
  19.         while (i >= 0) {
  20.             j = r.nextInt(i + 1);
  21.             k = values[i]; values[i] = values[j]; values[j] = k;
  22.             System.out.println(result[i] = values[i--]);
  23.         }
  24.     }
  25.    
  26. }

Saludos,