【问题标题】:Java command prompt loopJava 命令提示符循环
【发布时间】:2015-04-27 13:08:57
【问题描述】:

我有这个简单的代码,就像一个小命令提示符一样工作。要求用户输入命令,并根据他输入的内容显示一条消息。我只想让它循环,以便用户被要求一次又一次地输入命令,直到他键入“退出”。我怎么做? 代码如下:

public static void main(String[] args) {

    Scanner command = new Scanner(System.in);

    System.out.println("Enter command: ");

    String text = command.nextLine();

        switch(text){

        case "start":
            System.out.println("Machine started!");
            break;

        case "stop":
            System.out.println("Machine stopped.");
            break;

        case "exit":
            System.out.println("Application Closed");
            break;

        default:
            System.out.println("Command not recognized!");
            break;
        }

    command.close();
}

谢谢

【问题讨论】:

  • while ( 不满足条件 ){ /* 你的代码 */ 重置值来测试 }
  • 尝试使用链式 if-else 并使用 text.equals("xxxxxx") 作为条件。
  • @farukdgn:他为什么要那样做?
  • @farukdgn:您正在测试错误的值。 "xxxxxxxx" 和 "exit" 永远不会相等。但是,我指的是您的 if-else 建议。

标签: java while-loop


【解决方案1】:

我更喜欢:

public static void main(String[] args) {

    Scanner command = new Scanner(System.in);

    System.out.println("Enter command: ");
    boolean running = true;

    while(running){

        switch(command.nextLine()){

        case "start":
            System.out.println("Machine started!");
            break;

        case "stop":
            System.out.println("Machine stopped.");
            break;

        case "exit":
            System.out.println("Application Closed");
            running = false;
            break;

        default:
            System.out.println("Command not recognized!");
            break;
        }
    }
    command.close();
}

【讨论】:

  • 不断地重新声明文本?为什么不只一次?
  • @Stultuske 这有多糟糕?将引用保持在自己的范围内。
  • @Bubletan:与其说是评论,不如说是一个问题。考虑这里的范围: String text = ""; while ( .... ){ /* code */ } 是的,限制作用域还不错,但是每次都重新创建实例变量,也有人不喜欢看到。
  • @Stultuske Yah,最好的办法就是switch (command.nextLine())
【解决方案2】:

你可以像这样把它放在一个while循环中:

String text = "";

while(!text.equalsIgnoreCase("exit"))
{
    System.out.println("Enter command: ");

    text = command.nextLine();

        switch(text){

        case "start":
            System.out.println("Machine started!");
            break;

        case "stop":
            System.out.println("Machine stopped.");
            break;

        case "exit":
            System.out.println("Application Closed");
            break;

        default:
            System.out.println("Command not recognized!");
            break;
        }
}

让你的while循环的条件是while text “exit”。

【讨论】:

    【解决方案3】:

    这样的?对于这种情况,我更喜欢 do-while,因为您可能想至少给出一个命令。

    public static void main(String[] args) {
        boolean running = true;
    
        Scanner command = new Scanner(System.in);
        do {
            System.out.println("Enter command: ");
            String text = command.nextLine();
            switch(text){
                case "start":
                    System.out.println("Machine started!");
                    break;
                case "stop":
                    System.out.println("Machine stopped.");
                    running = false;  //here?
                    break;
                case "exit":
                    System.out.println("Application Closed");
                    running = false; //..or here?
                    break;
                default:
                    System.out.println("Command not recognized!");
                    break;
            }
        } while(running);
        command.close();
    }
    

    【讨论】:

      【解决方案4】:

      如果您想使用开关,最简单的方法可能是带有标签的简单无限 while 循环。当输入匹配 "exit" 时,我们只是打破循环。

      loop:
      while (true) {
          String text = command.nextLine();
          switch (text) {
          // ...
          case "exit":
              break loop;
          }
      }
      

      【讨论】:

        【解决方案5】:

        初始示例中缺少while循环:

            public static void main(String args[]) {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
            while (true) {
                String command = br.readLine().toLowerCase();
        
                switch (command) {
                    case "exit": {
                        // exit here
                    } break;
        
                    default: {
                        // unrecognised command
                    }
                }
            }
        }
        

        【讨论】:

        • 你拼错了siwtch。此外,您永远不会离开 while 循环。