import java.util.*;
public class Exam2_2 {
public static void main(String[]args) {
Random rand = new Random();
int roll = 0;
int roll2 = 0;
int tries = 0;
while((roll % 2 == 0) && (roll2 % 2 == 0)) {
roll = rand.nextInt(8) + 1;
roll2 = rand.nextInt(8) + 1;
System.out.println("(" + roll + ", " + roll2 + ")");
tries++;
}
System.out.println("you won after " + tries + " tries");
}
}
我的任务是模拟滚动两个8面骰子,只有在两个数字均匀时才停止。我不确定我做错了什么,并尝试了很多不同的东西,看看它是否会像我需要的那样工作。任何建议将不胜感激。感谢。
答案 0 :(得分:2)
这似乎是对我使用do {} while
的最佳时机,例如
Random rand = new Random();
int tries = 0;
int roll;
int roll2;
do {
roll = rand.nextInt(8) + 1;
roll2 = rand.nextInt(8) + 1;
System.out.printf("(%d, %d)%n", roll, roll2);
tries++;
} while ((roll % 2 != 0) || (roll2 % 2 != 0)); // <-- while roll or
// roll2 is odd.
System.out.println("you won after " + tries + " tries");
或,您可以使用DeMorgan's Law并将((roll % 2 != 0) || (roll2 % 2 != 0))
替换为
while (!((roll % 2 == 0) && (roll2 % 2 == 0)));
即, NOT (roll
甚至且roll2
甚至)。
答案 1 :(得分:0)
问题出在while
条件:
while( (roll % 2 == 0) && (roll2 % 2 == 0) )
这意味着虽然roll
是偶数且roll2
也是偶数,但它会在该块中执行这些操作。
但是,你希望它继续循环,而它们的NOT都是偶数,并在它们出现时停止。
所以你应该改变你的状况:
while( !( (roll % 2 == 0) && (roll2 % 2 == 0) ) ) // they're NOT both even
或者你可以这样做以便更清晰:
while( (roll % 2 != 0) || (roll2 % 2 != 0) ) // at least one of them is odd
这样,当条件均匀时,条件为false
,从而停止循环。