程序误读了我的输入

时间:2015-04-23 15:41:49

标签: java if-statement java.util.scanner do-while

因此。我正在做一个关于java的教程,并且正在制作一个D& D角色表保护程序。我遇到的问题不是很严重,但是在我命令它加载之后,它按预期完成了消息,但是当我输入'new'然后点击输入它等待直到我再次输入然后它完成我的否则代码而不是我的if为“新”。我最终不得不再次打字。

do {
        if (command.equalsIgnoreCase("new")) {
            System.out.println("Let's create a character!\n");

然后是一堆无关紧要的其他代码:

    // LOAD CHARACTER
        else if (command.equalsIgnoreCase("load")) {
            // placeholder for load char.
            System.out
                    .println("This is where we will load a character in the     future.  For now it is empty, please select new.");
            command = text.nextLine();
            // EXIT CODE
        } else if (command.equalsIgnoreCase("exit")) {
            System.exit(0);

            // Invalid Response
        } else
            System.out.println("Invalid response. Please try again. ");
        command = text.nextLine();
    } while (!command.equalsIgnoreCase("exit"));

以及它是如何出现的:

请为新角色说'新'或加载以前保存的角色'加载'... 加载
这是我们加载角色的地方未来。现在它是空的,请选择新的。
new

无效的回复。请再试一次。
new
让我们创造一个角色!

这个角色的名字是什么?

2 个答案:

答案 0 :(得分:4)

您的“加载”中有command = text.nextLine();个问题。如果部分和循环结束。第一个输入在if块中,然后读取空白行,并在下一轮的if / else流中进行比较。

将输入读数放在if-else链之外是最好的方法,因为你不会在其他每个块中都有重复的代码。

do {
    if (command.equalsIgnoreCase("new")) {/*do new stuff*/} 
    else if (command.equalsIgnoreCase("load")) {/*do load stuff*/}
    else if (command.equalsIgnoreCase("exit")) {/*do exit stuff*/}
    else {/*do default/bad input stuff*/}

    //This line runs every loop iteration(unless one of your if blocks calls break or exit
    command = text.nextLine();
} while (!command.equalsIgnoreCase("exit"));

答案 1 :(得分:2)

打印This is where we will load ...后,在再次检查输入之前读取输入两次。紧接在消息之后,再次在循环结束时。