2011-12-22 16 views
11

Come si usa Math.random per generare ints casuali?Come si usa Math.Random per generare ints casuali?

Il mio codice è:

int abc= (Math.random()*100); 
System.out.println(abc); 

Tutto ciò che viene stampato è 0, come posso risolvere questo problema?

+7

Il codice in realtà non dovrebbe stampare 0, non dovrebbe essere compilato. –

+0

eclipse lo consente –

+0

Che versione è? La prima riga mi dà "Tipo non corrispondente: impossibile convertire il doppio in int", che è quello che mi aspetterei. –

risposta

21

Cast di un numero intero.

(int)(Math.random()*100); 
+8

Dovrebbe essere notato che questo genera 0-99 –

+0

basta dire aggiungere uno: (int) (Math.random() * 100 + 1)) ; – Russell

+0

Se è richiesto un numero casuale di 3 cifre, moltiplicare per 1000 e così via ... – Sizzler

11

In alternativa, se non c'è un motivo specifico per utilizzare Math.random(), utilizzare Random.nextInt():

Random rnd = new Random(); 
int abc = rnd.nextInt(100); // +1 if you want 1-100, otherwise will be 0-99. 
+0

(Le spiegazioni per i voti bassi sono generalmente apprezzate, in particolare quando non è chiaro che il PO non sarebbe stato meglio servito con un approccio più diretto soluzione.) –

+0

Perché? È uno più casuale dell'altro? – user3932000

+0

@ user3932000 Non che ne sia a conoscenza, è solo più chiaro. –

17

per il codice per compilare è necessario lanciare il risultato di un int.

int abc = (int) (Math.random() * 100); 

Tuttavia, se si utilizza invece la java.util.Random classe che ha costruito in modo per voi

Random random = new Random(); 
int abc = random.nextInt(100); 
0
int abc= (Math.random()*100);// wrong 

si Wil ottiene sotto messaggio di errore

Exception in thread "main" java.lang.Error: Unresolved compilation problem: Type mismatch: cannot convert from double to int

int abc= (int) (Math.random()*100);// add "(int)" data type 

, noto come tipo di fusione

se il vero risultato è

int abc= (int) (Math.random()*1)=0.027475 

quindi si otterrà uscita come "0", perché si tratta di un tipo di dati integer.

int abc= (int) (Math.random()*100)=0.02745 

uscita: 2 perché (100 * 0,02,745 mila = 2,7456 ... etc)

+0

(In genere è utile formattare il codice come codice, indentando con quattro spazi o usando la scorciatoia Ctrl-K.) –

-3
double i = 2+Math.random()*100; 
int j = (int)i; 
System.out.print(j); 
+0

Questa risposta non aggiunge alcun valore poiché la risposta identica è stata postata 3 anni fa. –

+0

È meglio lanciare subito il cast piuttosto che archiviarlo in un doppio, a meno che non sia davvero necessario memorizzare 'i'. – user3932000

0

È inoltre possibile utilizzare questo modo per ottenere numero casuale compreso tra 1 e 100 come:

SecureRandom src=new SecureRandom(); 
int random=1 + src.nextInt(100); 
+1

Benvenuto in Stack Overflow! Date un'occhiata al [codice di formattazione] (https://stackoverflow.com/help/formatting) in modo che sia più leggibile –

+0

In generale, dovreste usare SecureRandom solo quando avete bisogno di numeri casuali crittograficamente forti, poiché potrebbe bloccare l'attesa per più entropia. – kodi

Problemi correlati