math.random总是给出0结果

-7 java random

我正在使用Ubuntu 14.04.3 LTS,我正在从书中学习Java.我尝试用Ubuntu终端关注本书的一个例子,我正在使用Sublime Text.这是代码

import java.util.Scanner;

public class RepeatAdditionQuiz{
    public static void main(String[] args){
        int number1 = (int)(Math.random()%10);
        int number2 = (int)(Math.random()%10);

        Scanner input = new Scanner(System.in);

        System.out.print(
            "What is "+number1+" + "+number2+"?");
        int answer = input.nextInt();

        while(number1+number2 != answer){
            System.out.print("Wrong answer. Try again. What is "
                 +number1+" + "+number2+"? ");
            answer = input.nextInt();
        }
        System.out.println("You got it!");
    }
}
Run Code Online (Sandbox Code Playgroud)

但问题是,当我编译并执行它时.它给了我结果

什么是0 + 0?_

每次.它假设给我一个随机数,是的,它可以是0.但我尝试运行它超过10次,它一直给我0 + 0,当它假设从0-9随机.

当我输入0时,0 + 0的结果很好,它让我退出循环

我错过了一些让数学库有效的东西吗?我该如何解决随机问题?

Tun*_*aki 7

Math.random()返回0(包括)和1(不包括)之间的double值.它不返回整数值.因此,当您获取由Math.random()模10 生成的数字时,它将返回相同的double值.最终的强制转换int使该值始终为0.

运行以下代码以查看自己:

double random = Math.random();
System.out.println(random); // for example 0.5486395326203879
System.out.println(random % 10); // still 0.5486395326203879
System.out.println((int) (random % 10)); // outputs 0
Run Code Online (Sandbox Code Playgroud)

你真正想要的是使用一个Random对象和使用Random.nextInt(bound).要获得0到9之间的随机整数,您可以使用:

Random random = new Random();
int value = random.nextInt(10);
Run Code Online (Sandbox Code Playgroud)