ich möchte mir ein Int Array erzeugen lassen, in welchem keine doppelten Werte vorhanden sind.
Mein Code als Solches funktioniert zwar, indem randomisiert Werte erzeugt werden, jedoch kommen doppelte Werte vor. Es wäre daher sehe nett, wenn mir jemand helfen könnte.
Ich möchte keine Array Liste implementieren, nur ein Int Array in welchem alles von dannen geht.
Java:
importjava.util.Random;publicclassZufallImArray{publicstaticvoidmain(String[] args){int[] arrayZufall =newint[12];for(int i =0; i < arrayZufall.length; i++){Random rnd =newRandom();int zahlen = rnd.nextInt((20-1)+1)+1;
arrayZufall[i]= zahlen;}for(int k =0; k < arrayZufall.length; k++){for(int j =1; j < arrayZufall.length; j++){if(arrayZufall[k]== arrayZufall[j]){Random rnd =newRandom();int zahlen = rnd.nextInt((20-1)+1)+1;
arrayZufall[k]= zahlen;}}}for(int index =0; index < arrayZufall.length; index++){System.out.print(" "+ arrayZufall[index]);}}}
Es müsste sozusagen nochmal zurückgesprungen werden, wenn ein doppelter Wert gefunden wurde.
Das Programm ist ziemlich kompliziert. Leichter ist es sicht erst eine Zahl zu generieren und zu überprüfen ob diese schon im Array vorhanden ist. Wenn ja, dann eine neue generieren, wenn nicht dann einfügen.
So zB:
Java:
importjava.util.Random;publicclassZufallImArray{publicstaticvoidmain(String[] args){int[] arrayZufall =newint[12];Random rnd =newRandom();for(int i =0; i < arrayZufall.length; i++){int zahlen = rnd.nextInt((20-1)+1)+1;while(!testUnique(arrayZufall, zahlen)){
zahlen = rnd.nextInt((20-1)+1)+1;}
arrayZufall[i]= zahlen;}for(int index =0; index < arrayZufall.length; index++){System.out.print(" "+ arrayZufall[index]);}}publicstaticbooleantestUnique(int[] array,int number){for(int i =0; i<array.length; i++){if(array[i]== number){returnfalse;}}returntrue;}}
Danke genau das habe ich gesucht. Super Arbeit, ich verstehe nur nicht ganz, warum mein Weg nicht so zielführend war. ich meine das Array wird durchlaufen und überprüft, falls doppelt, dann neuer Rand Wert...
bei deiner Suche hast du bei jedem suchen in der inneren for-schleife eine neue Zufallszahl generiene lassen falls es der gleiche Wert war, und diese ungeprüft in dein Array geschrieben.
so wahnsinnig wesentlich anders ist mein Vorschlag nicht, doch finde ich ihn deutlich übersichtlicher:
Java:
publicstaticvoidmain(String[] args){int[] arrayZufall =newint[12];Random rnd =newRandom();for(int i =0; i < arrayZufall.length;){// trial
arrayZufall[i]= rnd.nextInt((20-1)+1)+1;// checkint j;for(j =0; j < i; j++){if(arrayZufall[i]== arrayZufall[j])break;}if(j==i) i++;// if valid, next i}// outputfor(int i =0; i < arrayZufall.length; i++){System.out.println(arrayZufall[i]);}}
Dir ist hoffentlich klar, dass bei dieser "Aufgabenstellung" (unabhängig, welchen Code du verwendest) das Array nicht beliebig groß gemacht werden darf, es droht sonst natürlich eine Endlosschleife?!
Es ist klar dass man ein Array der Länge 100 nicht mit Zufallszahlen zwischen 1 und 10 so initialisieren kann dass es keine doppelten Werte gibt. Man kann aber eine Endlosschleife verhindern indem man dies vorher überprüft oder aber in der Schleife überprüft ob man bereits alle möglichen Zufallszahlen eingefügt hat und dann abbrechen. Insofern kann man durch geeigneten Code die Endlosschleife durchaus verhindern