Ciao a tutti,
come leggerete dal titolo, devo riempire ogni cella di un array multidimensionale con un numero casuale che però non sia già stato inserito nelle altre celle.
Per farlo ho sviluppato questo codice, che però per certi versi non mi piace (vedere i commenti)
Come avrete letto non mi piace per niente il metodo del riempire l'array con un valore che non mi serve in questo momento.codice:public int[][] randomizeField(int[][] f){ int[] temp = new int[16]; int[][] ret = new int[f.length][f[0].length]; int r; //riempio tutto l'array con uno stesso numero che non mi serve //in modo che potrò sostuirlo sempre con uno generato dal random sotto //METODO ORRIBILE (se poi decido di aumentare i quadrati?) for(int i = 0; i < temp.length; i++){ temp[i] = 20; } for(int i = 0; i < temp.length; i++){ do{ r = randomGenerator.nextInt(16); } while (isInArray(temp, r)); temp[i] = r; } for(int i = 0, k = 0; i < ret.length; i++){ for(int j = 0; j < ret[0].length; j++, k++){ ret[j][i] = temp[k]; } } return ret; } //Il metodo qua sotto l'ho dovuto creare nonostante l'esistenza del metodo binarySearch //perché quest'ultimo mi dava problemi insoliti. public static boolean isInArray(int[] arr, int key){ for(int x : arr) if(x == key) return true; return false; }
Vi spiego innanzitutto perché l'ho fatto: nell'array mult mi serve avere casualmente nelle varie celle numeri da 0 a 15.
Quindi creo un numero casuale, controllo se è già dentro l'array e in caso affermativo creo un nuovo numero e ripeto.
Il problema è questo: lo zero. A me lo zero serve come numero significativo solo che già all'istaziamento dell'array questo è presente quindi se il randomizer me lo creerà vedrà che già c'è e quindi lo scarterà.
Come posso evitare questa cosa?

Rispondi quotando