Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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:
import java.util.Random;
public class ZufallImArray {
public static void main(String[] args) {
int[] arrayZufall = new int[12];
for (int i = 0; i < arrayZufall.length; i++) {
Random rnd = new Random();
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 = new Random();
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:
import java.util.Random;
public class ZufallImArray {
public static void main(String[] args) {
int[] arrayZufall = new int[12];
Random rnd = new Random();
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]);
}
}
public static boolean testUnique(int[] array, int number){
for(int i = 0; i<array.length; i++){
if(array[i] == number){
return false;
}
}
return true;
}
}
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:
public static void main(String[] args) {
int[] arrayZufall = new int[12];
Random rnd = new Random();
for (int i = 0; i < arrayZufall.length;) {
// trial
arrayZufall[i] = rnd.nextInt((20 - 1) + 1) + 1;
// check
int j;
for (j = 0; j < i; j++) {
if (arrayZufall[i] == arrayZufall[j]) break;
}
if (j==i) i++; // if valid, next i
}
// output
for (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