elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  desglose del un método generar numero aleatorio sin que se repita JAVA
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: desglose del un método generar numero aleatorio sin que se repita JAVA  (Leído 3,724 veces)
elm0n0

Desconectado Desconectado

Mensajes: 3


Ver Perfil
desglose del un método generar numero aleatorio sin que se repita JAVA
« en: 24 Abril 2015, 16:52 pm »

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.

Código:
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


Desconectado Desconectado

Mensajes: 1.070



Ver Perfil WWW
Re: desglose del un método generar numero aleatorio sin que se repita JAVA
« Respuesta #1 en: 26 Abril 2015, 15:29 pm »

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 Desconectado

Mensajes: 3


Ver Perfil
Re: desglose del un método generar numero aleatorio sin que se repita JAVA
« Respuesta #2 en: 26 Abril 2015, 19:00 pm »

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 Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: desglose del un método generar numero aleatorio sin que se repita JAVA
« Respuesta #3 en: 26 Abril 2015, 19:35 pm »

Código
  1. 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


Desconectado Desconectado

Mensajes: 1.070



Ver Perfil WWW
Re: desglose del un método generar numero aleatorio sin que se repita JAVA
« Respuesta #4 en: 26 Abril 2015, 19:41 pm »

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 Desconectado

Mensajes: 3


Ver Perfil
Re: desglose del un método generar numero aleatorio sin que se repita JAVA
« Respuesta #5 en: 30 Abril 2015, 01:00 am »

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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 Último mensaje 29 Marzo 2008, 07:45 am
por Override
Leer texto base y generar otro aleatorio {JAVA}
Java
drachmatizando 0 3,258 Último mensaje 16 Septiembre 2010, 19:24 pm
por drachmatizando
ayuda con un numero que se repita
Programación C/C++
daniel010 2 2,520 Último mensaje 13 Septiembre 2013, 03:02 am
por GenR_18
[SOLUCIONADO] Generar nombre aleatorio. « 1 2 3 »
Programación C/C++
Yugget 24 10,902 Último mensaje 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 Último mensaje 4 Abril 2016, 17:20 pm
por esjuleta
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines