使用do-while循环检查用户在Java中的输入

时间:2015-12-18 21:26:34

标签: java input java.util.scanner do-while

我正在尝试使用java创建一个简短的基于文本的冒险游戏。

我是一名初学程序员,所以我的方法可能效率不高,但我只使用了迄今为止我从学校课程中学到的知识。

在询问用户输入后,我的问题就出现了。

import java.util.Scanner;
public class House
{
    public static void main(String[]args)
    {

        System.out.println("You have just moved into your new house.");
        System.out.println("What do you do next?");
        Scanner scan = new Scanner(System.in);
        String input = scan.next();

        do
        {
            if(input.equals("enter") || input.equals("Enter"))
            {
                System.out.println("You have entered the house.");
            }

            else if(input.equals("leave") || input.equals("Leave"))
            {
                System.out.println("You left and never came back.");
                System.out.println("The End");
                System.exit(0);
            }

            else
            {
                System.out.println("I don't know how to "+input);
                System.out.println("Try again");
                System.out.println("What do you do next?");
                input = scan.nextLine();
            }
        }
        while(!input.equals("enter") || !input.equals("Enter") || !input.equals("leave") || !input.equals("Leave"));

    }
}

如果用户输入"离开","离开"或未知命令,程序将按预期工作。当用户输入"输入"或"输入"

我的do-while循环中的条件应该使程序退出循环,只要它们的输入等于"输入"或"输入",但程序陷入了无限循环。

程序将重复,"你已经进入了房子。"一遍又一遍。

为什么会出现这个问题?我不知道我做错了什么。

谢谢!

3 个答案:

答案 0 :(得分:3)

将其更改为

...
String input;
do
{
    input = scan.next();
    if(input.equals("enter") || input.equals("Enter"))
    {
        System.out.println("You have entered the house.");
    }
...

答案 1 :(得分:0)

由于您未在&#34中更改输入变量的值,请输入"阻止,当该块被击中时,它将继续循环并最终无限期地返回那里。

您可以提示您的用户在循环中输入,或者在您的"输入"中添加中断语句。块。

在这种情况下,我会选择后者,因为它不会像在循环中移动输入提示一样彻底改变代码的行为。

if(input.equals("enter") || input.equals("Enter"))
{
    System.out.println("You have entered the house.");
    //break;
    // or use system.exit as in your other block
    System.exit(0);
}

答案 2 :(得分:0)

仅供参考,而不是:

if(input.equals("enter") || input.equals("Enter"))

使用

input.equalsIgnoreCase("enter")

它会消除你的“或”条款并稍微缩短你的代码