[英]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();
}
}
这应该可以正常工作。在您的代码中,第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.