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 {
}
}
}
}
我无法弄清楚为什么我的程序作为无限循环运行。我认为这可能是我的其他声明的问题,但我不能让骰子停止滚动。
答案 0 :(得分:3)
快速查看后,我认为将||
(逻辑或)更改为&&
(逻辑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's answer。
答案 1 :(得分:2)
@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时,此语句仅为false - 当然这是不可能的,所以它总是如此,你有一个无限循环。使用逻辑AND时,如果roll
不是12 AND 而不是2,则该语句为真,否则(如果它是 OR 12 或者两者(谁知道,也许在其他宇宙中可能存在)),它的错误,这就是你想要的。
答案 2 :(得分:1)
问题在于:
while(roll != 2 || roll != 12)
想一想。
false OR true
为true
true OR false
为true
true OR true
为true
。简而言之,roll
没有价值会导致roll != 2 || roll != 12
评估为false
。因此,你得到一个无限循环。
答案 3 :(得分:0)
你的条件:
while(roll != 2 || roll != 12)
单词:虽然滚动的数字不是2或12.但是永远不能评估为假!
使用&&
(逻辑和)代替||
(逻辑或)
答案 4 :(得分:0)
do while循环的定义
while语句在a时连续执行一个语句块 特殊情况属实。其语法可表示为:
while(表达式){
statement(s)
}
让我们来看看你的while循环
while(roll != 2 || roll != 12)
想象一下,roll的值是2或12.让我们假设是2
while(2 != 2 || 2 != 12)
^ ^
false true
因此
while(true)
为什么?
由于逻辑OR,因此您看到此循环永远不会结束,因为基于while定义, while语句在特定条件为真时连续执行语句块。
如果将逻辑OR更改为逻辑AND
while(2 != 2 && 2 != 12)
^ ^
false true
因此
while (false)
并且它是基于while定义的循环结束。