如何在Java中仅使命令执行一次?

时间:2018-06-21 06:34:52

标签: java

我是Java的完全入门者,现在我正在尝试学习有关switch / class / loops的更多信息,并且我有以下代码:

boolean loop = true;
while (loop) {
    Scanner input = new Scanner(System.in);
    boolean executed = true;

    if (!executed) {
        System.out.println("\nPlease enter a command: ");
        executed = true;
    }

    String text = input.nextLine();

    switch (text) {

        case "start":
            System.out.println("\nYou began playing");
            text = input.nextLine();
            //loop = false;

        case "stop":
            System.out.println("\nYou stopped playing");
            text = input.nextLine();

    }
}

我的问题是我尝试使用以下行:System.out.println("\nPlease enter a command: ");仅运行一次,我该怎么做?

当我键入“开始”时,我收到开始消息,而当我键入“停止”时,我收到停止消息。但是,如果我第二次键入“开始”或“停止”,则会跳至“请输入命令”消息。

如何更改代码,以免我第二次或第三次键入“开始”或“停止”时不运行第一条消息?

我听取了某人的建议,并添加了以下内容:

if (!executed) {
    System.out.println("\nPlease enter a command: ");
    executed = true;
}

但是这不起作用,它只会导致程序启动时第一条消息根本不显示...

2 个答案:

答案 0 :(得分:1)

boolean executed = true;

if(!executed) {
    System.out.println("\nPlease enter a command: ");
    executed = true;
}

等同于

if(!true) {
    System.out.println("\nPlease enter a command: ");
    executed = true;
}

因此该语句永远不会输入。 您必须将变量置于while循环之外,并将其设置为false。

boolean executed = false;
while(loop) {

    Scanner input = new Scanner(System.in);


    if(!executed) {
        System.out.println("\nPlease enter a command: ");
        executed = true;
    }

    //...
}

但是您的问题是,您永远不会在“ stop”之后离开while循环。

此外,您在每个switch语句之后都忘记了休息时间。这导致继续执行下一个switch语句。

写得更好

boolean loop = true;

Scanner input = new Scanner(System.in);

while(loop) {
    System.out.println("\nPlease enter a command: ");
    String text = input.nextLine();

    switch (text) {

    case "start":
        System.out.println("\nYou began playing");
        break;

    case "stop":
        System.out.println("\nYou stopped playing");

        loop = false;
        break;
    }
}

如果您真的想调用“请输入命令”,只需将其放在while循环之外即可。

答案 1 :(得分:1)

由于当前存在一些重大缺陷,因此您可以大大改进代码。

SqlServerMetaDataExtensions
  1. 您可以将Scanner input = new Scanner(System.in); System.out.println(); System.out.println("Please enter a command: "); outer: for(String text = input.nextLine(); ; text = input.nextLine()) { switch (text) { case "start": System.out.println(); System.out.println("You began playing"); break; case "stop": System.out.println(); System.out.println("You stopped playing"); break outer; // break the for-loop default: System.out.println(); System.out.println("Invalid input"); } } 行移出循环。
  2. 您只需用两个对System.out.println("\nPlease enter a command: ");的调用就可以替换每个System.out.println("\nSome message"),其中一个是空的。
  3. 您可能想在switch语句中System.out.println()。因为否则它们会掉线,导致意想不到的行为。
  4. 您还想在break中添加default分支,以处理switch不等于text"start"的情况。