Java - Numeros aleatorios

 
Vista:

Numeros aleatorios

Publicado por pdlp (1 intervención) el 23/11/2015 12:27:36
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
public class main {
    public static int N=10;
    public static int A=9;
    public static int tam=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++;
                        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;
    }
 
}
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