我是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;
}
但是这不起作用,它只会导致程序启动时第一条消息根本不显示...
答案 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
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");
}
}
行移出循环。 System.out.println("\nPlease enter a command: ");
的调用就可以替换每个System.out.println("\nSome message")
,其中一个是空的。System.out.println()
。因为否则它们会掉线,导致意想不到的行为。break
中添加default
分支,以处理switch
不等于text
或"start"
的情况。