我编写了如下的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 );
答案 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();
}
}
答案 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);