public class DiceLoop {
public static void main(String[] args) {
// TODO Auto-generated method stub
int die1;
int die2;
int roll = 0;
int count = 0;
while(roll != 2 || roll != 12) {
die1 = (int)(Math.random()*6 + 1);
die2 = (int)(Math.random()*6 + 1);
roll = die1 + die2;
count = count + 1;
System.out.println("Die 1: " + die1);
System.out.println("Die 2: " + die2);
System.out.println("Total: " + roll);
if(roll == 2 || roll == 12){
System.out.println("Stop rolling the dice. 2 or 12 has been thrown.");
}
else {
}
}
}
}
我无法弄清楚为什么我的程序作为无限循环运行。我认为这可能是我的 else 语句有问题,但我无法让骰子停止滚动。
快速浏览后,我相信将||
(逻辑 OR(更改为&&
(逻辑 AND(将解决问题。
public class DiceLoop
{
public static void main(String[] args)
{
int die1;
int die2;
int roll = 0;
int count = 0;
while(roll != 2 && roll != 12)
{
die1 = (int)(Math.random()*6 + 1);
die2 = (int)(Math.random()*6 + 1);
roll = die1 + die2;
count = count + 1;
System.out.println("Die 1: " + die1);
System.out.println("Die 2: " + die2);
System.out.println("Total: " + roll);
if(roll == 2 || roll == 12)
{
System.out.println("Stop rolling the dice. 2 or 12 has been thrown.");
}
else
{
}
}
}
}
有关说明,请参阅@drewmoore的答案。
@Nikola,@ifLoop @StephenC都是正确的,但我认为说明它们为什么正确的最清晰方法是使用真值表:
roll = 2 roll = 12 (roll != 2 || roll != 12) (roll != 2 && roll != 12)
F F T T
F T T F
T F T F
T T F F
用逻辑 OR ( ||
编写(,这个语句只有在 roll
既是 12 又是 2 时才是假的——这当然是不可能的,所以它总是真的,你有一个无限循环。使用逻辑 AND,当 roll
不是 12 也不是 2 时,语句为真,否则(如果它是 2 或 12 或两者兼而有之(谁知道呢,也许这在其他宇宙中是可能的((,它是假的,这就是你想要的。
问题就在这里:
while(roll != 2 || roll != 12)
想想吧。
- 如果 roll 为 2,则不会是 12,因此
false OR true
是true
- 如果 roll 为 12,则不会是 2,因此
true OR false
是true
- 如果滚动是其他任何东西,
true OR true
是true
.
简而言之,roll
没有任何价值会导致roll != 2 || roll != 12
评估false
。 因此,你会得到一个无限循环。
这是你的 while 条件:
while(roll != 2 || roll != 12)
换句话说:虽然角色编号不是 2 或 12。这永远不能被评估为错误!使用&&
(逻辑和(而不是||
(逻辑或(
do while 循环的定义
while 语句连续执行语句块,而特定条件为真。其语法可以表示为:
而(表达式({
statement(s)
}
让我们来看看你的 while 循环
while(roll != 2 || roll != 12)
想象一下,卷的值是 2 或 12。假设是 2
while(2 != 2 || 2 != 12)
^ ^
false true
因此
while(true)
为什么?
由于逻辑 OR,所以正如你所看到的,这个循环永远不会结束,因为根据 while 定义,while 语句在特定条件为 true 时不断执行语句块。
如果将逻辑 OR 更改为逻辑 AND
while(2 != 2 && 2 != 12)
^ ^
false true
因此
while (false)
它是基于 while 定义的循环的结束。