如何在用户选择退出之前一直要求用户输入?
How to keep asking for user Input untill user chooses exit?
我正在尝试制作一个 "choice" 菜单,我在其中使用 switch/case 函数让用户进行选择。我的代码中的问题是我希望它一直要求输入,直到用户输入 "sair",这在葡萄牙语中表示 "exit"。当他们键入 "ajuda" 时,这意味着 "help" 他们得到一个可用命令列表来执行,但是如果用户键入 "ajuda" 然后 "sout" 被执行并且构建完成,程序到此结束...
我的目标是让它 运行 直到我们选择停止,我认为有一种使用 readln 或类似方法的方法。
无论如何,这是关于选择的代码块:
public static String escolha() {
Scanner userInput = new Scanner(System.in);
String strEscolha = userInput.next();
boolean sair = false;
do {
switch (strEscolha) {
case "ajuda":
System.out.println("Comandos disponiveis:");
System.out.println("Ajuda; Fogo; Jogo; Resposta; Estado; Acaso; Reset; Sair;");
break;
case "Ajuda":
System.out.println("Comandos disponiveis:");
System.out.println("Ajuda; Fogo; Jogo; Resposta; Estado; Acaso; Reset; Sair;");
break;
case "sair":
System.out.println("Obrigado por jogar!");
sair = true;
break;
default:
System.out.println("Comando Invalido!");
continue;
}
} while (sair == false);
return null;
}
如果有人有简单的方法让它不断询问命令,请告诉我:(
提前致谢!!
PS: 刚开始,请不要评判,我对java的了解可以忽略不计:\
首先,删除 System.exit
,否则您将关闭整个 JVM 而不会执行后续代码(您的 IDE 可能已经向您发出了关于此的死代码警告)。
其次,您需要使用 sair == false
(或者,更好的是 !sair
)而不是 sair = false
。前者是比较;后者是一个赋值,使 sair
为假。
do { ... } while (false)
会执行一次循环体,但不会重复。
第三,紧接在 while
之前的 return strEscolha;
将导致该方法在尝试循环之前 return,因此应该将其删除。
您的代码的主要问题是您在 'ajuda' 情况下不请求用户输入。
以下是经过一些小改动以及一些意见和建议的代码:
// if your method isn't supposed to return anything, simply make it void
public static void escolha() {
Scanner userInput = new Scanner(System.in);
// print some useful information when the application starts, so that the user knows
// what to do
System.out.println("Comandos disponiveis:");
System.out
.println("Ajuda; Fogo; Jogo; Resposta; Estado; Acaso; Reset; Sair;");
String strEscolha = userInput.next();
boolean sair = false;
do {
// remove duplicate case by converting the input to lower letters
switch (strEscolha.toLowerCase()) {
case "ajuda":
System.out.println("Comandos disponiveis:");
System.out
.println("Ajuda; Fogo; Jogo; Resposta; Estado; Acaso; Reset; Sair;");
// read the user input
strEscolha = userInput.next();
System.out.println(strEscolha);
break;
case "sair":
System.out.println("Obrigado por jogar!");
sair = true;
break;
default:
System.out.println("Comando Invalido!");
}
} while (sair == false);
// do not forget to close the scanner, it might cause a memory leak
userInput.close();
}
我正在尝试制作一个 "choice" 菜单,我在其中使用 switch/case 函数让用户进行选择。我的代码中的问题是我希望它一直要求输入,直到用户输入 "sair",这在葡萄牙语中表示 "exit"。当他们键入 "ajuda" 时,这意味着 "help" 他们得到一个可用命令列表来执行,但是如果用户键入 "ajuda" 然后 "sout" 被执行并且构建完成,程序到此结束... 我的目标是让它 运行 直到我们选择停止,我认为有一种使用 readln 或类似方法的方法。
无论如何,这是关于选择的代码块:
public static String escolha() {
Scanner userInput = new Scanner(System.in);
String strEscolha = userInput.next();
boolean sair = false;
do {
switch (strEscolha) {
case "ajuda":
System.out.println("Comandos disponiveis:");
System.out.println("Ajuda; Fogo; Jogo; Resposta; Estado; Acaso; Reset; Sair;");
break;
case "Ajuda":
System.out.println("Comandos disponiveis:");
System.out.println("Ajuda; Fogo; Jogo; Resposta; Estado; Acaso; Reset; Sair;");
break;
case "sair":
System.out.println("Obrigado por jogar!");
sair = true;
break;
default:
System.out.println("Comando Invalido!");
continue;
}
} while (sair == false);
return null;
}
如果有人有简单的方法让它不断询问命令,请告诉我:( 提前致谢!! PS: 刚开始,请不要评判,我对java的了解可以忽略不计:\
首先,删除 System.exit
,否则您将关闭整个 JVM 而不会执行后续代码(您的 IDE 可能已经向您发出了关于此的死代码警告)。
其次,您需要使用 sair == false
(或者,更好的是 !sair
)而不是 sair = false
。前者是比较;后者是一个赋值,使 sair
为假。
do { ... } while (false)
会执行一次循环体,但不会重复。
第三,紧接在 while
之前的 return strEscolha;
将导致该方法在尝试循环之前 return,因此应该将其删除。
您的代码的主要问题是您在 'ajuda' 情况下不请求用户输入。
以下是经过一些小改动以及一些意见和建议的代码:
// if your method isn't supposed to return anything, simply make it void
public static void escolha() {
Scanner userInput = new Scanner(System.in);
// print some useful information when the application starts, so that the user knows
// what to do
System.out.println("Comandos disponiveis:");
System.out
.println("Ajuda; Fogo; Jogo; Resposta; Estado; Acaso; Reset; Sair;");
String strEscolha = userInput.next();
boolean sair = false;
do {
// remove duplicate case by converting the input to lower letters
switch (strEscolha.toLowerCase()) {
case "ajuda":
System.out.println("Comandos disponiveis:");
System.out
.println("Ajuda; Fogo; Jogo; Resposta; Estado; Acaso; Reset; Sair;");
// read the user input
strEscolha = userInput.next();
System.out.println(strEscolha);
break;
case "sair":
System.out.println("Obrigado por jogar!");
sair = true;
break;
default:
System.out.println("Comando Invalido!");
}
} while (sair == false);
// do not forget to close the scanner, it might cause a memory leak
userInput.close();
}