做while语句检查两个条件

时间:2015-02-12 13:18:09

标签: java do-while

我编写了如下的Java代码,它生成随机数并将它们相加以给出正确的答案。但是,我也试图使用do while语句生成两个彼此不相等的错误答案或正确的答案。但是,它不起作用。最后一部分java代码没有运行。可以有两个相同的随机数ans_wrong1和ans_wrong2。

简单来说,如果ans_wrong2等于ans_wrong1或ans_correct,则生成另一个随机数。继续此过程,直到生成的数字不等于其他两个数字中的任何一个。有人能发现我做错了什么并提出建议吗?

让我们尝试进一步简化问题,因为建议的解决方案不起作用。

我想生成两个彼此不相等的随机数或正确的答案。

代码已更新 - 仍然无效

由于

int ans_correct = 8;

int ans_wrong1;
    do {
        ans_wrong1 = randomGenerator.nextInt(20);
    } while(ans_wrong1 == ans_correct);

    int ans_wrong2;
    do {
        ans_wrong2 = randomGenerator.nextInt(10);
    } while ( ans_wrong2 == ans_correct || ans_wrong2 == ans_wrong1 );

3 个答案:

答案 0 :(得分:1)

您的问题是,首先生成一个不等于ans_correct的数字,然后将其丢弃,并生成一个不等于ans_wrong1的新数字,甚至不看ans_correct

要做你想做的事,你需要生成一个数字,然后同时测试两个条件:

do {
    ans_wrong2 = randomGenerator.nextInt(10);
} while ( ans_wrong2 == ans_correct || ans_wrong2 == ans_wrong1 );

答案 1 :(得分:1)

您的代码有一些错误......首先,您已经知道的内容:

值覆盖

您的代码块可能会无意中相互撤消:

int ans_wrong2;
do {
    ans_wrong2 = randomGenerator.nextInt(10);

} while(ans_wrong2 == ans_correct);

do {
    ans_wrong2 = randomGenerator.nextInt(10);
} while(ans_wrong2 == ans_wrong1);

第二个while循环将始终替换ans_wrong值,并且可以将其替换为第一个循环中排除的值(即第二个循环可能产生ans_correct

对此的简单解决方案是:

int ans_wrong2;
do {
    ans_wrong2 = randomGenerator.nextInt(10);

} while(ans_wrong2 == ans_correct || ans_wrong2 == ans_wrong1);

不可能的答案

第二个错误是你的ans_correct永远不会是值9.这是因为randomGenerator.nextInt(5)将始终返回0到4之间的值。

将两个一起添加,将产生0到8之间的值。

然而,

randomGenerator.nextInt(10)可能会产生值9 ....这绝不是一个选项。

代码示例:

private static final Random randomGenerator = new Random();

public static final void testRand() {
    int ans_correct = randomGenerator.nextInt(5) + randomGenerator.nextInt(5);

    int ans_wrong1;
    do {
        ans_wrong1 = randomGenerator.nextInt(10);
    } while(ans_wrong1 == ans_correct);

    int ans_wrong2;
    do {
        ans_wrong2 = randomGenerator.nextInt(10);

    } while(ans_wrong2 == ans_correct);

    do {
        ans_wrong2 = randomGenerator.nextInt(10);
    } while(ans_wrong2 == ans_wrong1);

    System.out.printf("Correct %d  WA1 %d WA2 %d\n", ans_correct, ans_wrong1, ans_wrong2);
}

public static void main(String[] args) {
    for (int i = 0; i < 20; i++) {
        testRand();
    }
}

working at Ideone

答案 2 :(得分:0)

这应该可以正常工作。在你的代码中,第二个while while循环无效,因为ans_wrong2的值无论如何在第三个循环中被替换,在最后一个循环中你只是检查它是否等于ans_wrong1。因此,它仍然有可能等于ans_correct。

Random randomGenerator = new Random();

int random1 = randomGenerator.nextInt(5);
int random2 = randomGenerator.nextInt(5);

int ans_correct = random1 + random2;

int ans_wrong1;
do {
    ans_wrong1 = randomGenerator.nextInt(10);
} while(ans_wrong1 == ans_correct);

int ans_wrong2;
do {
    ans_wrong2 = randomGenerator.nextInt(10);

} while(ans_wrong2 == ans_correct || ans_wrong2 == ans_wrong1);