Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Ayuda con este problema con array

Con el siguiente código lo que pretendo es dado un vector de aleatorios en double convertirlos a enteros entre 1 y 9 con la función floor, lo que no consigo es que en el nuevo vector de números generados no se repita.

Lo que tendría que hacer el programa es que cuando se encuentre con un numero previamente generado en el vector incrementar ese v en 1 y así sucesivamente. Solo puede generar números entre 1 y 9.

La cuestión es que entra en un bucle infinito cuando encuentra un numero generado previamente.

El array resultante debería ser: 7 6 9 2 8 1 3 4

public class main {
public static int N=10;
public static int A=9;


public static double[] aleatorios = new double [A];


public static void main(String[] args) {
aleatorios[0]=0.726802610435;
aleatorios[1]=0.640222144497;
aleatorios[2]=0.979414940182;
aleatorios[3]=0.130781529439;
aleatorios[4]=0.640007844046;
aleatorios[5]=0.0894105419328;
aleatorios[6]=0.653591197073;
aleatorios[7]=0.420307150234;
aleatorios[8]=0.928238117216;


Solucion=SolucionInicial(desde,N,tam);


public static int[] SolucionInicial(int desde, int N, int tam) {
int[] numeros = new int[tam];
//int n;
double n, v;
N--;
int veces=0;

for (int i = 0; i < numeros.length; i++) {
n= aleatorios[i];
do {

//n = rnd.nextInt(N - 1 + 1) + 1; // desde 1 hasta 9
System.out.println("aleatorios "+aleatorios[i]);
v = 1+floor(n*9);

System.out.println("valor de v"+v);
//si el numero está repetido incrementar v en 1 y comprobar además que no se pase del tamaño total 9
System.out.println(comprobarSiContiene(numeros,i,v));

//System.out.println(v);
numeros[i] = (int)v;
System.out.println("Genero "+v);

if((comprobarSiContiene(numeros,i,v))&&(v<9)){
v++;
System.out.println("Si repetido genero "+v);
numeros[i]=(int)v;
}
} while (comprobarSiContiene(numeros, i, v));


}
for(int i=0;i<numeros.length;i++){
System.out.print("Lista de numeros "+numeros[i]);
}
return numeros;
}


public static boolean comprobarSiContiene(int[] numeros, int indice, double valor) {
for (int i = 0; i < indice; i++) {
if (numeros[i] == valor) {

System.out.println("En numeros "+numeros[i] + " el valor "+valor+"está repetido");
return true;
}
}
return false;
}


}

noviembre 23, 2015 | Unregistered Commenterpdlp