Java math.random始终给出0结果
我正在使用Ubuntu14.04.3 LTS,我正在从书中学习Java。我试着用Ubuntu终端来遵循书中的一个例子,我使用的是Sublime文本。这是密码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
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;