Aleatorios pero sin que se repitan????

Resacoxis
08 de Febrero del 2006
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]);
}


}
}

NoDo
08 de Febrero del 2006
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.

Resacoxis
08 de Febrero del 2006
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.

NoDo
08 de Febrero del 2006
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.

NoDo
08 de Febrero del 2006
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.