Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java math.random始终给出0结果_Java_Random - Fatal编程技术网

Java math.random始终给出0结果

Java math.random始终给出0结果,java,random,Java,Random,我正在使用Ubuntu14.04.3 LTS,我正在从书中学习Java。我试着用Ubuntu终端来遵循书中的一个例子,我使用的是Sublime文本。这是密码 import java.util.Scanner; public class RepeatAdditionQuiz{ public static void main(String[] args){ int number1 = (int)(Math.random()%10); int number2

我正在使用Ubuntu14.04.3 LTS,我正在从书中学习Java。我试着用Ubuntu终端来遵循书中的一个例子,我使用的是Sublime文本。这是密码

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!");
    }
}
但问题是,当我编译并执行它时。它给了我结果

什么是0+0_

每一次。它假设给我一个随机数,是的,它可以是0。但我试着运行了10多次,它一直给我0+0,而假设它是从0-9随机的

当我键入0时,0+0的结果很好。因此,它使我脱离了循环

我是否错过了使数学库正常工作的东西?如何解决随机问题?

返回一个介于0(包含)和1(排除)之间的双精度值。它不返回整数值。因此,当取Math.random模10生成的数字时,它返回相同的双精度值。最后一次强制转换为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
您真正想要的是使用一个随机对象并使用。要使随机整数介于0和9之间,可以使用:

Random random = new Random();
int value = random.nextInt(10);
阅读文件:

返回一个带正号的双精度值,大于或等于 0.0且小于1.0

因此,您将始终得到小于1的值,并且转换为int将使其四舍五入为0。例如,使用具有NextInt max方法的随机对象:

公共静态双随机

返回带正号的双精度值,大于或等于0.0且小于1.0。返回值是从该范围内以近似均匀分布的方式伪随机选择的

它返回一个满足0.0的双精度。该方法返回一个从0(包含)到1(排除)的随机双精度。执行%10不会影响此值,但将其强制转换为int会截断任何小数部分,始终生成0

如果需要0-9之间的随机数,可以将Math.random乘以10,而不是将余数除以10

或者,您可以创建java.util.Random对象并调用

返回带正号的双精度值,大于或等于0.0且小于1.0


这就是问题所在。然后需要与10相乘,得到一个介于0和10之间的数字,然后可以转换为int。

Math.random给出一个介于0和1之间的双倍值

Math.random返回一个大于或等于0且小于1的数字。 你要找的是

 int number1 = (int)(Math.random()*10);
 int number2 = (int)(Math.random()*10);

另外,要从给定范围中获取随机数,请将其用于Math.random

int number 3 = min + (int)(Math.random() * ((max - min) + 1))
对于random.nextInt

int number 4 = random.nextInt(max - min) + min;
Math.random方法返回一个介于0和1之间的双精度值,因此您永远不会得到大于或等于1的数字,也永远不会得到一个可以是0但永远不会是1的值。当你从这个值中取剩余值超过10时,你会得到一个0作为结果


Math.random%10将始终为0,因为random方法为您提供了0。您是否费心阅读文档或使用Google查找任何示例?但是如果我得到了0.99,并将其乘以10,我将首先得到9.99。这就是为什么我说你会得到一个介于0和10之间的数字。你同意吗?在那之后,当你把它转换成整数时,你会得到一个介于0和9之间的数字,这样你是对的。好吧,我明白了,我不清楚这就是你的意思,为什么投票给我?答案是准确的
 Random rand = new Random();
 int number1 = rand.nextInt(10);
 int number2 = rand.nextInt(10);
int number 3 = min + (int)(Math.random() * ((max - min) + 1))
int number 4 = random.nextInt(max - min) + min;