# Zufallszahlen ohne doppelten Wert



## Grunge67 (13. Nov 2007)

Hallo,

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:


```
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
```


----------



## Tharsonius (13. Nov 2007)

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.


----------



## Grunge67 (13. Nov 2007)

Und wie würde das Quelltext-Technisch aussehen??? Das versteh ich so nicht  :autsch:


----------



## Niki (13. Nov 2007)

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!


----------



## Grunge67 (13. Nov 2007)

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 ..


----------



## Niki (13. Nov 2007)

Naja, probiers halt mal so:

```
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;
	}
```


----------

