我写了一个使用while循环的简单猜谜游戏。 如果用户键入任何以“ y”开头的单词,游戏将再次运行,但是如果用户键入任何其他单词,游戏将退出并给出报告。
public static void loopcalc(Scanner console) {
int totalRounds = 0, totalGuesses = 0, best = 1000000;
boolean want = true;
while (want = true) {
int eachguess = playOneGame(console);
totalRounds++;
totalGuesses += eachguess;
System.out.println("Do you want to play again?");
String input = console.next();
if (input.toLowerCase().charAt(0) == 'y') {
want = true;
} else {
want = false;
}
best = Math.min(eachguess, best);
}
report(console, totalGuesses, totalRounds, best);
}
对不起,我不知道如何正确键入代码。
答案 0 :(得分:6)
您写道:
while(want = true) {
您肯定要检查want
是否为true
。因此改写:
while(want == true) {
或者更好:
while(want) {
在Java中,=
是为变量赋值的运算符。它还返回值。因此,当您输入wanted = true
时,您将:
want
设置为true
true
在这里,while
返回得到true
,并无限地继续循环。
Ps:这是一个非常常见的问题。在2003年,在Linux内核中插入后门的famous attempt使用了此功能(C语言也有此功能)。
答案 1 :(得分:0)
=
中的 want = true
是一个赋值运算符。相反,您应该尝试使用等式==
运算符。
while(want == true)
或while(want)
答案 2 :(得分:0)
这是您的最新答案。
public static void loopcalc(Scanner console) {
int totalRounds = 0, totalGuesses = 0, best = 1000000;
boolean want = true;
while (want) {
int eachguess = playOneGame(console);
totalRounds++;
totalGuesses += eachguess;
System.out.println("Do you want to play again?");
String input = console.next();
if (input.toLowerCase().charAt(0) == 'y') {
want = true;
} else {
want = false;
}
best = Math.min(eachguess, best);
}
report(console, totalGuesses, totalRounds, best);
}
您还可以尝试以下方法来摆脱旺旺变量:
public static void loopcalc(Scanner console) {
int totalRounds = 0, totalGuesses = 0, best = 1000000;
boolean want = true;
while (true) {
int eachguess = playOneGame(console);
totalRounds++;
totalGuesses += eachguess;
System.out.println("Do you want to play again?");
String input = console.next();
if (input.toLowerCase().charAt(0) == 'n') {
break;
}
best = Math.min(eachguess, best);
}
report(console, totalGuesses, totalRounds, best);
}