这是一个简单的问题选择,然后回答程序:
import java.util.Scanner;
public class Mains {
static Scanner console = new Scanner(System.in);
static Tof tof = new Tof();
static int Ievel = 0;
static int Input = 0;
static boolean GAME = true;
static boolean AT_START = true;
static boolean IN_QUESTION = false;
public static void main (String[] args) {
while (GAME) {
String InputS = "";
if (AT_START) {
System.out.println("Welcome to the game! Please select a number from 1 to 10.");
AT_START = false;
}
if (!IN_QUESTION)
Input = console.nextInt();
if (Input == -1) {
GAME = false;
console.close();
} else {
String question = tof.getQuestion(Input);
String answer = tof.getAnswer(Input);
System.out.println(question);
IN_QUESTION = true;
while (IN_QUESTION) {
InputS = console.nextLine();
if (InputS != console.nextLine()) {
if (InputS.equals(answer)) {
System.out.println("Correct!");
} else {
System.out.println("Incorrect. " + InputS + " " + answer);
}
}
}
}
}
}
}
问题:
当进入IN_QUESTION循环并写一个答案时,它总是不正确的。 这是因为InputS变量总是为空,无论如何,而它上面设置了console.nextLine()。
为什么空?我该如何解决这个问题?
如果您需要其他类Tof:http://pastebin.com/Fn5HEpL2
答案 0 :(得分:2)
nextInt
在整数之后没有得到行终止符,你从控制台读取两次(第二次在if语句中)。
所以如果你输入:
123
apple
发生以下情况:
Input
被分配了123
InputS
被分配一个空字符串InputS
与apple
进行比较且不相等(来自InputS != console.nextLine()
- 我不知道为什么会这样)你可以通过以下方式修复它:
在console.nextLine();
之后加console.nextInt();
OR
使用Input = Integer.parseInt(console.nextLine())
代替nextInt
删除此内容 - if (InputS != console.nextLine())
答案 1 :(得分:0)
您拨打console.nextLine
两次。这意味着您阅读了一条您要检查的行,而另一行则不会。这可能不是你想要的。另请注意,初次调用nextInt
不会消耗您输入号码后按下的换行符。在此之后,您需要nextLine
,但在主循环之前。
一些一般性评论:
答案 2 :(得分:0)
你正在从控制台上读两次。这应该有效:
while (IN_QUESTION) {
InputS = console.nextLine();
if (InputS.equals(answer)) {
System.out.println("Correct!");
} else {
System.out.println("Incorrect. " + InputS + " " + answer);
}
}
答案 3 :(得分:0)
问题是nextInt()
方法未读取新行字符,因此它保留在扫描程序缓冲区中,并在下次调用nextLine()
该字符时先印了。
这是解决问题的方法:
//empty the newline character from the scanner
console.nextLine();
while (IN_QUESTION) {
InputS= console.nextLine();
if (InputS.equals(answer)) {
System.out.println("Correct!");
} else {
System.out.println("Incorrect. " + InputS + " " + answer);
}
}