2010-03-14 13 views
31

Quale metodo restituisce un intervallo casuale compreso tra un minimo e un massimo? O non esiste un tale metodo?Come posso generare un numero intero casuale tra min e max in java?

Quello che sto cercando è qualcosa di simile:

NAMEOFMETHOD (min, max) 

(dove min e max sono int s)

che ritorna soemthing come questo:

8 

(in modo casuale)

Se esiste un tale metodo, è possibile collegarsi a e documentazione pertinente con la tua risposta. Grazie.

Aggiornamento: atempting per implementare la soluzione completa nella risposta nextInt ho questo:

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

sto ancora ricevendo gli stessi errori del compilatore:

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 

cosa sta andando male qui ?

+0

Hai dimenticato di dichiarare 'random' e assegnare una nuova istanza di' java.util.Random' ad esso? – MAK

+0

potresti spiegare come farlo? – David

+0

Hai dichiarato dichiarazioni di importazione per java.util.Casuale – Shashi

risposta

104

costruire un oggetto a caso all'avvio dell'applicazione:

Random random = new Random(); 

Quindi utilizzare Random.nextInt(int):

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

Nota che i limiti sia inferiore e superiore sono comprensivi.

+0

Ho aggiornato la domanda con l'errore che si verifica quando provo a fare ciò che sta andando storto? – David

+2

David, devi prima istanziarlo. 'Casuale casuale = nuovo casuale();' È ancora * solo * codice Java. Non c'è alcun mezzo di magia;) – BalusC

+2

E assicurati di creare un'istanza dell'oggetto Random solo una volta e riutilizzarla. Non creare un nuovo oggetto casuale per ogni chiamata alla tua funzione. –

15

È possibile utilizzare Random.nextInt(n). Questo restituisce un int random in [0, n). Basta usare max-min + 1 al posto di n e aggiungendo min alla risposta darà un valore nell'intervallo desiderato.

+0

ho aggiornato la domanda con il errore che si verifica quando provo a fare ciò che sta andando storto? – David

-4

importazione java.util.Random;

-2

Questo genera un intero casuale di dimensione 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

Sembra un modo complesso per ottenere qualcosa che può essere fatto in una singola riga di codice. Si prega di utilizzare la formattazione del codice in futuro. –

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

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

Il tuo _algoritmo_ è casuale x * numero positivo + numero positivo. Come può questo risultato sempre in un numero compreso tra max e min? – Ruben

+1

Casuale è tra 0 e 1. Fai i conti. –

+0

Tieni presente che il limite inferiore è inclusivo ma il limite superiore è esclusivo in questa risposta. Se si desidera che entrambi siano inclusivi, utilizzare: return (int) (Math.random() * (Max-Min + 1)) + Min; – Synn

0

Utilizzando la classe Random è la strada da percorrere, come suggerito nella risposta accettata, ma qui è un modo corretto meno straight-forward di fare se non si voleva creare un nuovo oggetto a caso:

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

Come le soluzioni di cui sopra non considerano la possibile fuoriuscita di fare max-min quando min è n egative, qui un'altra soluzione (simile a quella di 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)); 
    } 

questo funziona anche se si chiama con:

getRandom(Integer.MIN_VALUE, Integer.MAX_VALUE) 
Problemi correlati