繁体   English   中英

在while语句中检查两个条件

[英]do while statement to check two conditions

我已经编写了如下的Java代码,该代码生成随机数并对它们求和以给出正确答案。 但是,我也尝试使用do while语句生成两个彼此不相等的错误答案或正确答案。 但是,它不起作用。 Java代码的最后一个do部分未运行。 可能有两个相同的随机数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 );

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

要执行您想要的操作,您需要生成一个数字,然后同时针对两种情况对其进行测试:

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

您的代码有几个错误……首先,您已经知道的是:

值覆盖

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

 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();
    }
}

在Ideone工作

这应该可以正常工作。在您的代码中,第2个do while循环无效,因为无论如何在第3个循环中都会替换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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM