从随机发生器打印偶数

时间:2014-11-08 02:16:50

标签: java random

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面骰子,只有在两个数字均匀时才停止。我不确定我做错了什么,并尝试了很多不同的东西,看看它是否会像我需要的那样工作。任何建议将不胜感激。感谢。

2 个答案:

答案 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,从而停止循环。