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 soll ein Array mit 10 Werten erstellen und diese mit 10 int Zufallszahlen zwischen 1-9 füllen, das bekomme ich ja noch gerade hin, aber dann dürfen sollen keine doppelten Werte auftauschen, und das bekomme ich einfach nicht gepacken hier mein Quelltext:
Code:
int[] Feld = new int[10];
Random rand = new Random();
for (int i = 0; i<10; i++)
{
Feld[i] = (rand.nextInt(10));
System.out.println(Feld[i]);
}
[\code]
Das läuft, nur kommen doppelte Werte und ich weiß nicht wie sich das ändern lässt :(
Kann mir jemand helfen ?
MFG
GrungeRockNation
Ich würde das Array als erstes einmal vorbelegen. Dazu würde ich -1 nehmen, da dies kein gültiges Ergebnis darstellt.
Anschließend brauchst Du nur noch jedesmal nachdem Du eine Zufallszahl erstellt hast durch Dein Array zu schauen, ob Du diese Zahl schon drin hast. Falls ja, neue Zahl generieren, falls nein eintragen.
Das durchsuchen kannst Du mit einer zweiten Schleife machen, die immer am Anfang anfängt und so lange weiter geht bis sie auf -1 stößt.
Bedenke aber dass Du bei 10 Feldern 10 verschiedene Zahlen brauchst, wenn die aber nur von 1-9 gehen dürfen hast Du nur 9.
Anderer Ansatz:
Du befüllst eine Liste mit den möglichen Werten, also: 1-10 oder 0-9 wie auch immer.
Die Random funktion liefert dir immer nur einen Wert zwischen 0 und der Anzahl der Felder in der Liste. Danach entfernst du das Objekt mit dem ermittelten Index aus der Liste und fügst es deinem Array an der letzten Stelle hinzu. Dadurch kannst du erst gar nicht eine doppelte Zahl bekommen!
aber es muss doch eine möglichkeit geben meinen bis jetzt erstellen quelltext, den ich wenigstens verstehe so zu korrigieren das dort keine doppelten werte mehr ausgegeben werden ..
public static void main(String[] args) {
List<Integer> tmp = new ArrayList<Integer>();
for(int i = 0; i < 10; i++)
tmp.add(new Integer(i));
int[] erg = new int[tmp.size()];
for(int i = 0; i < erg.length; i++){
int rand = getRandom(tmp);
erg[i] = rand;
System.out.print(rand + ", ");
}
}
private static int getRandom(List<Integer> l){
int max = l.size();
int index = (int)(Math.random() * max * 10) / 10;
int value = l.remove(index).intValue();
return value;
}