math.random, solo generando uno 0?

Il seguente codice produce solo 0; -;

Che cosa sto facendo di sbagliato?

public class RockPaperSci { public static void main(String[] args) { //Rock 1 //Paper 2 //Scissors 3 int croll =1+(int)Math.random()*3-1; System.out.println(croll); } } 

Modifica, un altro poster ha suggerito qualcosa che lo ha risolto. int croll = 1 + (int) (Math.random () * 4 – 1);

Grazie a tutti!

Stai usando Math.random() che afferma

Restituisce un double valore con un segno positivo, maggiore o uguale a 0.0 e minore di 1.0 .

Stai trasmettendo il risultato a un int , che restituisce la parte intera del valore, quindi 0 .

Quindi 1 + 0 - 1 = 0 .

Potresti usare Random

 Random rand = new Random(); System.out.println(rand.nextInt(3) + 1); 

Math.random() genera valori doppi tra range – [0.0, 1.0) . E quindi hai convertito il risultato in un int :

 (int)Math.random() // this will always be `0` 

E poi moltiplicare per 3 è 0 . Quindi la tua espressione è veramente:

 1 + 0 - 1 

Immagino tu voglia mettere una parentesi come questa:

 1 + (int)(Math.random() * 3) 

Detto questo, dovresti usare il metodo Random#nextInt(int) se vuoi generare valori interi in un certo intervallo. È più efficiente dell’uso di Math#random() .

Puoi usarlo in questo modo:

 Random rand = new Random(); int croll = 1 + rand.nextInt(3); 

Guarda anche:

  • Math.random () contro Random.nextInt (int)

Uno dei modi più semplici per generare in modo casuale 0 o 1 in Java:

  (int) (Math.random()+0.5); or (int) (Math.random()*2); 

Tutti i nostri compagni ti hanno spiegato i motivi di un risultato inaspettato che hai ottenuto.

Supponendo che tu voglia generare un croll casuale

Considera Random per la risoluzione

  Random rand= new Random(); double croll = 1 + rand.nextInt() * 3 - 1; System.out.println(croll); 
 public static double random() 

Restituisce un doppio valore con un segno positivo, maggiore o uguale a 0.0 e minore di 1.0. I valori restituiti sono scelti in modo pseudocasuale con (approssimativamente) distribuzione uniforms da quell’intervallo.

  int croll =1+(int)Math.random()*3-1; 

per esempio

  int croll =1+0*-1; System.out.println(croll); // will print always 0