2

这是一个简单的问题选择,然后回答程序:

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

4

4 回答 4

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

于 2013-06-25T12:45:43.773 回答
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);
    }
}
于 2013-06-25T12:51:14.607 回答
0

你打console.nextLine了两次电话。这意味着您阅读了要检查的行,而不会检查另一行。这可能不是你所追求的。另请注意,您的初始调用nextInt不会消耗您在输入号码后按下的换行符。nextLine在那之后,但在主循环之前,你需要一个。

一些一般性说明:

  • 大写名称仅用于常量,因此您的变量应为小写;
  • 你真的应该使用局部变量而不是静态变量。现在这不会伤害你,但它很快就会伤害你。
于 2013-06-25T12:45:33.523 回答
0

您正在从控制台读取两次。这应该有效:

while (IN_QUESTION) {
    InputS = console.nextLine();
    if (InputS.equals(answer)) {
        System.out.println("Correct!");
    } else {
        System.out.println("Incorrect. " + InputS + " " + answer);
    }
}
于 2013-06-25T12:45:47.040 回答