2010-03-14 2 views
31

Welche Methode gibt ein zufälliges int zwischen einem Minimum und Maximum zurück? Oder existiert eine solche Methode nicht?Wie erzeuge ich eine zufällige ganze Zahl zwischen min und max in Java?

Was ich suche ist so etwas wie dieses:

NAMEOFMETHOD (min, max) 

(wobei min und max sind int s)

die soemthing wie folgt zurück:

8 

(zufällig)

Wenn eine solche Methode existiert, können Sie bitte Link th die relevante Dokumentation mit Ihrer Antwort. Vielen Dank.

Update: atempting die vollständige Lösung in der nextInt Antwort zu implementieren ich diese:

class TestR 
{ 
    public static void main (String[]arg) 
    { 
     Random random = new Random() ; 
     int randomNumber = random.nextInt(5) + 2; 
     System.out.println (randomNumber) ; 
    } 
} 

ich bin immer noch die gleichen Fehler aus dem complier:

TestR.java:5: cannot find symbol 
symbol : class Random 
location: class TestR 
     Random random = new Random() ; 
     ^
TestR.java:5: cannot find symbol 
symbol : class Random 
location: class TestR 
     Random random = new Random() ; 
          ^
TestR.java:6: operator + cannot be applied to Random.nextInt,int 
     int randomNumber = random.nextInt(5) + 2; 
             ^
TestR.java:6: incompatible types 
found : <nulltype> 
required: int 
     int randomNumber = random.nextInt(5) + 2; 
              ^
4 errors 

Was ist los hier los ist ?

+0

Haben Sie zu erklären vergessen zu 'random' und weisen Sie eine neue Instanz von' java.util.Random' dazu? – MAK

+0

könnten Sie erklären, wie das geht? – David

+0

Haben Sie import-Anweisungen für java.util deklariert.Random – Shashi

Antwort

104

Konstruieren Sie eine Random-Objekt beim Start der Anwendung:

int randomNumber = random.nextInt(max + 1 - min) + min; 

Beachten Sie, dass die beiden unteren und oberen Grenzen sind inklusive:

Random random = new Random(); 

Dann Random.nextInt(int) verwenden.

+0

Ich aktualisierte die Frage mit dem Fehler, der auftritt, wenn ich versuche, das zu tun, was schief geht? – David

+2

David, du musst es zuerst instanziieren. 'Random random = new Random();' Es ist immer noch * nur * Java-Code. Es gibt keine Mittel zur Magie;) – BalusC

+2

Und stellen Sie sicher, dass Sie nur einmal das Objekt Random instanziieren und wiederverwenden. Erstellen Sie kein neues zufälliges Objekt für jeden Aufruf Ihrer Funktion. –

15

Sie können Random.nextInt(n) verwenden. Dies gibt ein zufälliges int in [0, n] zurück. Wenn Sie nur max-min + 1 anstelle von n eingeben und min zur Antwort hinzufügen, erhalten Sie einen Wert im gewünschten Bereich.

+0

i aktualisiert die Frage mit der Fehler, der auftritt, wenn ich versuche, das zu tun, was falsch läuft? – David

-2

Dies erzeugt eine Zufallszahl von Größe psize

public static Integer getRandom(Integer pSize) { 

    if(pSize<=0) { 
     return null; 
    } 
    Double min_d = Math.pow(10, pSize.doubleValue()-1D); 
    Double max_d = (Math.pow(10, (pSize).doubleValue()))-1D; 
    int min = min_d.intValue(); 
    int max = max_d.intValue(); 
    return RAND.nextInt(max-min) + min; 
} 
+2

Das scheint ein komplexer Weg zu sein, etwas zu erreichen, was in einer einzigen Codezeile erledigt werden kann. Bitte verwenden Sie die Codeformatierung in Zukunft. –

5
public static int random_int(int Min, int Max) 
{ 
    return (int) (Math.random()*(Max-Min))+Min; 
} 

random_int(5, 9); // For example 
+0

Ihr _Algorithmus_ ist Zufall x * positive Zahl + positive Zahl. Wie kann dies immer zu einer Zahl zwischen Max und Min führen? – Ruben

+1

Random ist zwischen 0 und 1. Machen Sie die Mathematik. –

+0

Beachten Sie, dass die untere Grenze inklusive ist, aber die obere Grenze ist in dieser Antwort exklusiv. Wenn Sie beides verwenden möchten, verwenden Sie: return (int) (Math.random() * (Max-Min + 1)) + Min; – Synn

0

die Random-Klasse verwenden ist die Art und Weise, wie in der akzeptierten Antwort vorgeschlagen zu gehen, aber hier ist eine weniger geradlinig richtige Art und Weise zu tun, es, wenn Sie wollte kein neues Random-Objekt erstellen:

min + (int) (Math.random() * (max - min + 1)); 
3

Da die oben genannten Lösungen, die mögliche Überlauf von nicht berücksichtigen max-min tun, wenn min n egative, hier eine andere Lösung (ähnlich dem von kerouac)

public static int getRandom(int min, int max) { 

     if (min > max) { 
      throw new IllegalArgumentException("Min " + min + " greater than max " + max); 
     } 

     return (int) ((long) min + Math.random() * ((long)max - min + 1)); 
    } 

dies funktioniert auch, wenn man es so nennen mit:

getRandom(Integer.MIN_VALUE, Integer.MAX_VALUE) 
Verwandte Themen