Java输入是否为空?

时间:2013-06-25 12:38:09

标签: java input

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

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 个答案:

答案 0 :(得分:2)

nextInt在整数之后没有得到行终止符,你从控制台读取两次(第二次在if语句中)。

所以如果你输入:

123
apple

发生以下情况:

  • Input被分配了123
  • 的值
  • InputS被分配一个空字符串
  • InputSapple进行比较且不相等(来自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);
    }
}