Java - ayuda con sifras sin repetir en JAVA

 
Vista:

ayuda con sifras sin repetir en JAVA

Publicado por jose (3 intervenciones) el 27/02/2011 21:21:56
Hola, tengo el sgte problema: las sifras no deben de repetirse y con este codigo que he hecho no me resulta :(... hay alguien que me pueda ayudar?, gracias de antemano

public class s {

public static void main(String[] args) {
double[] s = new double[100];

s[0] = Math.round(Math.random()*10);

for(int i = 1; i < s.length; i++){
double temp = Math.round(Math.random()*10);
s[i]=temp;
int j=0;
while(s[j] == temp && j <= i ){
temp = Math.round(Math.random()*10);
s[i]=temp;
}

}
for (int i = 0; i < s.length; i++){
System.out.println(s[i]);
}

}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:ayuda con sifras sin repetir en JAVA

Publicado por Camilo Andrés (62 intervenciones) el 27/02/2011 23:13:18
lo que veo es que se van a generar 100 números pero al usar el método Math.round lo que haría es generar 11 números por lo que es difícil que los 100 sean diferentes, si se quita ese método se generan números diferentes ya que se obtendrán números con decimales, como lo haces solo salen números enteros de 0-10
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con sifras sin repetir en JAVA

Publicado por jose (3 intervenciones) el 28/02/2011 06:30:15
pero si el Math.round genera 1000 numero , Math.round(Math.random()*1000), como podria hacer para que no se repitan?. si se repite volver a generar un nuevo numero hasta que no este repetido...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:ayuda con sifras sin repetir en JAVA

Publicado por Camilo Andrés (62 intervenciones) el 28/02/2011 14:15:48
hola que pena no me explique bien, lo que sucede es que al usar el Math.random() se generan números aleatorias de 0.0 hasta 1.0, tu lo usas y lo multiplicas por 10 pero al usar el Math.round() este lo que hace es aproximar hasta el número entero mas cercano por ejemplo al usar Math.random() da como resultado 0.3567 cuando se multiplica por 10 queda 3.567 y al usar Math.round() lo aproxima y queda 4 lo cual quedaría limitado por el Math.round() ya que tendrías solo 11 números usando esta función.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con sifras sin repetir en JAVA

Publicado por jose (3 intervenciones) el 28/02/2011 17:46:03
si , entiendo... pero al no usar Math.round igual hay la posibilidad de que se repitan, aunque muy pequeña, y es eso lo que quisiera que mi programa hiciera , que si genera uno igual vuelva a generar hasta que genere uno que no sea identico
aqui en :

while(s[j] == temp && j <= i ){

temp = Math.round(Math.random()*10);

s[i]=temp;
}

genera un nuevo numero por si es identico a s[j] (j = 0-10) , lo que no hace mi programa es que este nuevo numero que genera , no prueba si ya esta .
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:ayuda con sifras sin repetir en JAVA

Publicado por Camilo Andrés (62 intervenciones) el 01/03/2011 04:15:17
intenta usando este y me comentas

public class Main {

public static void main(String[] args) {
double[] s = new double[100];

s[0] = Math.round(Math.random()*10);

for(int i = 1; i < s.length; i++){
double temp = Math.round(Math.random()*10);
for(int j=0;j==i;j++){
while(s[j]==temp){
s[i]=Math.round(Math.random()*10);
}
}
}
for (int i = 0; i < s.length; i++){
System.out.println(s[i]);
}

}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:ayuda con sifras sin repetir en JAVA

Publicado por Camilo Andrés (62 intervenciones) el 01/03/2011 22:41:30
hola jose, que pena por el codigo anterior lo revise con calma y con este sale loq ue necesitas, si agregas el Math.round va a quedar en bucle ya que solo habràn 10 datos para 100 campos, por lo que nunca saldría del ciclo, puedes intentar cambiando los for para corroborar que no se repiten

public class Main {

public static void main(String[] args) {
double[] s = new double[100];
for(int i = 0; i < s.length; i++){
double temp = Math.random()*10;
s[i]=temp;
for(int j=0;j<s.length;j++){
if(i==j){
s[i]=temp;
}
else{
if(s[i]!=s[j]){
s[i]=temp;
}
else{
j=10;
i=0;
}
}
}
}
for (int i = 0; i < s.length; i++){
System.out.println(s[i]);
}

}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar