当我在制作一个模拟骰子的程序时,我遇到了一个问题。 这是我写的代码(我知道它不是很好的编程,但我正在学习)。它有效,当然我知道其中有不必要的部分,但不是问题。
double x ;
String z ;
x = Math.random() ;
z = Double.toString(x) ;
z = z.substring(2, 3) ;
while (x>6 || x<1) {
x =Math.random() ;
z = Double.toString(x);
z = z.substring(2, 3) ;
x = Integer.parseInt(z );
}
z = Double.toString(x );
z = z.substring(0, 1) ;
JOptionPane.showMessageDialog(null, "Antal prickar: "+z);
问题是看到我错误的在while循环中有一个if语句,它在几周前工作,现在当我重写代码时它不起作用。
double x ;
String z ;
x = Math.random() ;
z = Double.toString(x) ;
z = z.substring(2, 3) ;
while (x>6 || x<1) {
if (x>6) {
x =Math.random() ;
z = Double.toString(x);
z = z.substring(2, 3) ;
x = Integer.parseInt(z );
}
}
z = Double.toString(x );
z = z.substring(0, 1) ;
JOptionPane.showMessageDialog(null, "Antal prickar: "+z);
任何人都可以解释为什么它不起作用,因为我应该能够将if语句放在while循环中而不会给我错误吗?
答案 0 :(得分:2)
假设您之前的代码正在运行(并且在样式等上跳过评论),主要问题似乎是添加了if语句。
考虑x = 0的情况:
while( x > 6 || x < 1)
将在条件满足后运行(x小于1)。
if(x > 6)
虽然不满意(x不大于6),因此永远不会更新x
,导致无限循环。
顺便说一下,我不使用Math.random()
而是创建Random
的新实例,然后调用nextInt(6) + 1
获取1到6之间的随机整数(包括两者):< / p>
Random rand = new Random(); //you might want to store this elsewhere and reuse the instance
int dice = rand.nextInt(6) + 1; //done, random integer between 1 and 6
答案 1 :(得分:0)
您似乎正在使用java.lang.Math.random()
生成介于1和6之间的数字。当random()
调用返回0.0到1.0间隔内标准化的值时,您选择第一个小数作为候选如果价值超出限制,请重复random()
来获取新的候选人号码。
在您发送的第二个代码段(您说无法正常工作)中,格式显示while
循环仅包含if
语句,而这语句只会在x > 6
时执行,但x
永远不会超过6,因为值介于0和1之间。
在while循环之前的第一个块中可能缺少此行:
x = Integer.parseInt(z );
循环中的if
条件将被删除。
编辑以生成1到6之间的随机值,我可以做的最简单的代码是:
new java.util.Random().nextInt(6) + 1