# Zufallszahl nur einmal



## razr981 (13. Jan 2014)

Hallo Leute, 

ich möchte ein Quiz machen und wähle die Fragen eines Array mit einer Zufallszahl aus. Mein Problem ist, dass jede Zufallszahl nur einmal vorkommen sollte. Ich wollte es mit einer ArrayList lösen in die ich die bereits ausgewählten Zufallszahlen einspeichere und bei jeder Neuen wieder prüfe ob sie schon vorkam. Jedoch klappt es bisher noch nicht. 




```
public static int zufall(int min, int max){		
	
		System.out.println(fragenEinmal.toString());
		
		Random rand = new Random(); 
		
		int zufallzahl = rand.nextInt((max - min)+1) +min;		
		if(fragenEinmal.size()==0){											    
               fragenEinmal.add(zufallzahl);						 
		
		}
		
		else{
			for (int i = 0; i < fragenEinmal.size(); i++) {
			if (zufallzahl != fragenEinmal.get(i)){
				fragenEinmal.add(zufallzahl);
				
				break;
				
			}
			else {
				zufall(0,51);	
						}
			}
		}
		
		return zufallzahl;	
		
	}
```


----------



## Natac (14. Jan 2014)

Ich würde dir eine Klasse empfehlen, da es ja offensichtlich einen Zustand gibt (welche Zahlen wurden schon gezogen):


```
public class Zufall{
  private int min;
  private int max;
  private boolean[] gezogen;
   

  public Zufall(int min, int max){
    this.min = min;
    this.max = max;
    this.gezogen= new boolean[max-min];
  }

  public int nextZahl(){
   int zahl;
   do{
     zahl = new Random().nextInt((max - min)+1);
   }while(gezogen[zahl] == true)
   
   gezogen[zahl] = true;
   return zahl
  }
}
```
Natürlich gibt es noch einige Fragestellungen zu klären:
- Wie willst du reagieren, wenn max <= min ist?
- Was soll nextZahl() zurückgeben, wenn bereits jede Zahl 1x gezogen wurde (im Moment Endlosschleife)


----------



## kay73 (14. Jan 2014)

Wenn Du die Liste aller Fragen im Speicher hast, verwende doch Collections.shuffle() um die Fragen zu permutieren. Dann hast Du das Problem nicht, Dir Zufallszahlen merken zu müssen.


----------



## Natac (14. Jan 2014)

kay73 hat gesagt.:


> Wenn Du die Liste aller Fragen im Speicher hast, verwende doch Collections.shuffle() um die Fragen zu permutieren. Dann hast Du das Problem nicht, Dir Zufallszahlen merken zu müssen.


... und anschließend die Liste einfach ablaufen. Ist natürlich viel eleganter. :toll:


----------

