Autor
|
Tema: desglose del un método generar numero aleatorio sin que se repita JAVA (Leído 3,724 veces)
|
elm0n0
Desconectado
Mensajes: 3
|
estoy intentando comprender por que este código me da un numero aleatorio sin repetirse y por mas vueltas que le doy no consigo comprenderlo. Lo he intentado pasar a un papel siguiendo el bucle pero en el papel me ocurre que si que se pierde algún numero mientras que ejecutandolo en la maquina virtual funciona perfectamente y sinceramente no me gusta copiar código en mis programas que no comprenda. Espero alguien pueda echarme una mano a comprenderlo. public void numeroAleatorioSinRepetirse() {// aquí genero el numero int[] numeros = new int[4]; int sumador = 0; for (int i = 0; i < numeros.length; i++) { numeros[i] = sumador; sumador++; System.out.println(i + " = " + numeros[i]); } System.out.println(""); for (int i = 3; i >= 0; i--) { // aquí lo guardo en una posicion // aleatoria int rand = (int) (Math.random() * (i + 1)); int temp = numeros[i]; numeros[i] = numeros[rand]; numeros[rand] = temp; System.out.println(i + " = " + numeros[i]); } }
|
|
« Última modificación: 24 Abril 2015, 16:55 pm por elm0n0 »
|
En línea
|
|
|
|
daryo
|
bueno creo(no lo he probado) que funciona asi: dentro del array numeros pone numeros en orden desde cero 0,1,2,3 luego cambia el orden de los numeros 1,0,3,2 usando posiciones aleatorias con math.random
|
|
« Última modificación: 26 Abril 2015, 15:39 pm por daryo »
|
En línea
|
buenas
|
|
|
elm0n0
Desconectado
Mensajes: 3
|
Si, si funciona así pero no comprendo por que no repite ninguna posición por que al usar el random crea un aleatorio y en la segunda vuelta del bucle existe la posibilidad de que se repita la posición o eso es lo que me parece a mí
En la practica funciona perfectamente pero no comprendo el porque.
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
int rand = (int) (Math. random() * (i + 1));
Siempre intercambia el número con uno en una posición inferior. Así, todos los números serán (probablemente) intercambiados. Siempre existe la posibilidad de que rand sea siempre la misma posición.
|
|
« Última modificación: 26 Abril 2015, 19:50 pm por ivancea96 »
|
En línea
|
|
|
|
daryo
|
edito:lo que dice ivancea es cierto no me habia dado cuenta pero de todas formas no pasa nada si repite.
porque solo esta intercambiando de posiciones y como los numeros van en orden. miralo de esta forma 0,1,2,3
luego toma el numero en la posicion 0 es decir el numero cero y decide intercambiarlo por un numer al azar asi que toma el 2 por ejemplo 2,1,0,3
toma el numero en la posicion 1 es decir el 1 y decide intercambiarlo por el 0 2,0,1,3
toma el numro de la posicion 2 el 1 de nuevo y lo cambia con el 1 1,0,2,3
por ultimo toma el numero de la posicion 3 y lo cambia con si mismo(algo improbable) 1,0,2,3
|
|
« Última modificación: 26 Abril 2015, 19:51 pm por daryo »
|
En línea
|
buenas
|
|
|
elm0n0
Desconectado
Mensajes: 3
|
muchas gracias chicos, esta tarde conseguí entender lo del cambio de posición y estoy aplicándolo en otra parte del programa muchísimas gracias . Si hay forma de cerrar el post que lo cierre alguien o se me informe de como hacerlo XD.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Numero Aleatorio en PHP o MYSQL pero que NO se repita nunca
PHP
|
MakiaResc
|
9
|
23,238
|
29 Marzo 2008, 07:45 am
por Override
|
|
|
Leer texto base y generar otro aleatorio {JAVA}
Java
|
drachmatizando
|
0
|
3,258
|
16 Septiembre 2010, 19:24 pm
por drachmatizando
|
|
|
ayuda con un numero que se repita
Programación C/C++
|
daniel010
|
2
|
2,520
|
13 Septiembre 2013, 03:02 am
por GenR_18
|
|
|
[SOLUCIONADO] Generar nombre aleatorio.
« 1 2 3 »
Programación C/C++
|
Yugget
|
24
|
10,902
|
11 Marzo 2014, 02:13 am
por Yoel Alejandro
|
|
|
Ayuda!!! comparar que no se repita ningun numero en el array (Java)
Java
|
afrocardo
|
5
|
6,350
|
4 Abril 2016, 17:20 pm
por esjuleta
|
|