2017-09-25 1 views
0

ich eine Methode, die eine Zahl zwischen 1 und 5 Diese Methode, wenn alle fünf Nummern sortiert sind zu stoppen braucht Randomisierung (tut es jetzt nicht)Generieren einer Zeit Zufallszahl nur

Mein eigentlichen Code ist:
public ArrayList<String> generated = new ArrayList<String>(); oben

und die Methode selbst ist:

public int RandomizeQuestion() { 
    // Question numbers 
    final int min = 1; 
    final int max = 5; 

    Random r = new Random(); 
    int qran = r.nextInt((max - min) + 1) + min; 

    if (Collections.singletonList(generated).contains(qran)) { 
     RandomizeQuestion(); 
    } else { 
     generated.add(String.valueOf(qran)); 
    } 

    return qran; 
} 

Aber das passiert ist, alle Zeit die Zufallszahl wird als neu und diese Zahl erscheint wiederholt in Generator hinzugefügt Array.

+0

Was denken Sie 'Collections.singletonList (erzeugt)' tun? – shmosel

+0

Warum gibt Ihre Methode einen Wert zurück? – shmosel

+1

Warum überprüfen Sie nicht die Länge der Liste vor der Rekursion? – shmosel

Antwort

1

gibt als einziges Element eine List<ArrayList<String>> zurück, die generated enthält. Offensichtlich wird das qran nicht enthalten. Außerdem prüfen Sie nicht, ob die Liste die erwartete Länge hat, bevor Sie versuchen, ein neues Element hinzuzufügen. So etwas sollte funktionieren:

Aber hier ist ein viel einfacher und effizienter Weg, um eine Folge von Werten zu mischen:

// generate a list of values between min and max 
generated = IntStream.rangeClosed(min, max) 
     .map(String::valueOf) 
     .collect(Collectors.toCollection(ArrayList::new)); 

// shuffle them 
Collections.shuffle(generated); 
+0

Ich brauche Methode, um eine Nummer zur Zeit zu generieren, aber überprüfen Sie, ob die Nummer bereits generiert wird. Wenn ja, erzeuge eine neue Nummer, wenn nein, gib es zurück. Ich rufe diese Methode in einem anderen, um diese Zufallszahl jedes Mal zu generieren. –

Verwandte Themen