Aleatorios pero sin que se repitan????
Tengo el siguiente programa que genera numeros aleatorios, la idea es almacenarlos en el vector pero sin que se repitan. ¿Como puedo hacerlo?
import java.io.*;
import java.util.Random;
public class ejercicio39{
public static void main(String[] args)throws Exception{
InputStreamReader en=new InputStreamReader(System.in);
BufferedReader entrada = new BufferedReader(en);
String linea1;
System.out.println(\"Introduzca un valor entero para n\");
linea1=entrada.readLine();
int n;
int i;
n=Integer.parseInt(linea1);
int[] v=new int[n];
for (i=0;i<n;i++){
Random r = new Random();
int aleatorio = r.nextInt(n);
v[i]=aleatorio;
}
for (i=0;i<n;i++){
System.out.println(\"Los valores son:\"+v[i]);
}
}
}
import java.io.*;
import java.util.Random;
public class ejercicio39{
public static void main(String[] args)throws Exception{
InputStreamReader en=new InputStreamReader(System.in);
BufferedReader entrada = new BufferedReader(en);
String linea1;
System.out.println(\"Introduzca un valor entero para n\");
linea1=entrada.readLine();
int n;
int i;
n=Integer.parseInt(linea1);
int[] v=new int[n];
for (i=0;i<n;i++){
Random r = new Random();
int aleatorio = r.nextInt(n);
v[i]=aleatorio;
}
for (i=0;i<n;i++){
System.out.println(\"Los valores son:\"+v[i]);
}
}
}
Hola!
Bien, pues yo harÃa lo siguiente. No sé si habrá o no métodos internos de Java que lo hagan, pero yo lo harÃa a la manera de andar por casa.
Donde tienes:
for (i=0;i<n;i++){
Random r = new Random();
int aleatorio = r.nextInt(n);
v[i]=aleatorio;
}
pues yo pondrÃa:
int k=0;
for (i=0;i<n;i++,k++){
Random r = new Random();
int aleatorio = r.nextInt(n);
if(i==0){//No hay ningún elemento todavÃa, por lo que insertamos.
v[i]=aleatorio;
k=-1;//-1 para que al iterar el bucle, empiece en 0.
}else if(!(v[k]==aleatorio)){//recorremos otra vez el vector, y si no se repite, lo insertamos en el vector.
v[i]=aleatorio;
k=-1;
}
Espero que te sirva.
Venga, un saludo.
Bien, pues yo harÃa lo siguiente. No sé si habrá o no métodos internos de Java que lo hagan, pero yo lo harÃa a la manera de andar por casa.
Donde tienes:
for (i=0;i<n;i++){
Random r = new Random();
int aleatorio = r.nextInt(n);
v[i]=aleatorio;
}
pues yo pondrÃa:
int k=0;
for (i=0;i<n;i++,k++){
Random r = new Random();
int aleatorio = r.nextInt(n);
if(i==0){//No hay ningún elemento todavÃa, por lo que insertamos.
v[i]=aleatorio;
k=-1;//-1 para que al iterar el bucle, empiece en 0.
}else if(!(v[k]==aleatorio)){//recorremos otra vez el vector, y si no se repite, lo insertamos en el vector.
v[i]=aleatorio;
k=-1;
}
Espero que te sirva.
Venga, un saludo.
Gracias. Asi el unico problema que veo, es que solo guarda el numero en la primera posicion del vector, y el resto queda a cero. Pero bueno, ya me queda menos xD. Gracias de todas formas.
Hola!
Bueno, espero haberte dado una idea, pero más que nada de lo que se trata es de:
1.- Generar el número.
2.- Comparar con los que ya están metidos en el vector.
Si está, se elimina, si no, pal bote.
Venga, a ver si tienes suerte.
Un saludo.
Bueno, espero haberte dado una idea, pero más que nada de lo que se trata es de:
1.- Generar el número.
2.- Comparar con los que ya están metidos en el vector.
Si está, se elimina, si no, pal bote.
Venga, a ver si tienes suerte.
Un saludo.
Hola!
Bueno, después de pegarme toda la mañana con ello, creo que tengo una solución más o menos convincente. He mirado por otros foros y entre todo pues me salió esto:(ejecuté 10 veces y no se repitió nada, asà que a ver).
//CODIGO
int v [] = new int[9];
int i = 0;
int j = 0;
for (i = 0; i < v.length; i++) {
v[i] = (int) (Math.random() * 10);//*10 para generar entre 0 10.
while (j < i) {
if (v[i] == v[j]) {
v[i] = (int) (Math.random() * 10);
j = 0;
}
else {
j++;
}
}
j = 0;
System.out.println("Elemento " + (i + 1) + ":" + v[i]);
}
Esto si que creo que funciona.
Venga, un saludo.
Bueno, después de pegarme toda la mañana con ello, creo que tengo una solución más o menos convincente. He mirado por otros foros y entre todo pues me salió esto:(ejecuté 10 veces y no se repitió nada, asà que a ver).
//CODIGO
int v [] = new int[9];
int i = 0;
int j = 0;
for (i = 0; i < v.length; i++) {
v[i] = (int) (Math.random() * 10);//*10 para generar entre 0 10.
while (j < i) {
if (v[i] == v[j]) {
v[i] = (int) (Math.random() * 10);
j = 0;
}
else {
j++;
}
}
j = 0;
System.out.println("Elemento " + (i + 1) + ":" + v[i]);
}
Esto si que creo que funciona.
Venga, un saludo.
