如何在每个步骤后检查相同的条件,而不在Java中反复重复相同的代码?
在我的控制台应用程序中,我为用户提供了在任意点键入“exit”以返回主菜单的选项。当用户输入数据时,我会通过控制台提示他/她各种事情,并使用如何在每个步骤后检查相同的条件,而不在Java中反复重复相同的代码?,java,console,Java,Console,在我的控制台应用程序中,我为用户提供了在任意点键入“exit”以返回主菜单的选项。当用户输入数据时,我会通过控制台提示他/她各种事情,并使用扫描仪收集数据 我的问题是,如何检查用户是否在每次提示后输入“exit”(与请求的信息相反),而不必在每个步骤后使用相同的if语句 在我看来,任何类型的while或for循环都是不够的,因为它们只在开始时检查条件,而我需要检查输入之间的条件,并且我需要每个输入/提示在每次迭代中只执行一次 这里的关键是,检查之间执行的每个提示/代码都是不同的,因此循环无法工作
扫描仪
收集数据
我的问题是,如何检查用户是否在每次提示后输入“exit”(与请求的信息相反),而不必在每个步骤后使用相同的if语句
在我看来,任何类型的while
或for
循环都是不够的,因为它们只在开始时检查条件,而我需要检查输入之间的条件,并且我需要每个输入/提示在每次迭代中只执行一次
这里的关键是,检查之间执行的每个提示/代码都是不同的,因此循环无法工作
下面是一些示例代码:
String first;
String second;
Scanner input = new Scanner(System.in);
//prompt user for input
first = input.nextline();
if(first.equals("exit")){
//return to start menu
input.close();
return;
}
//prompt user for DIFFERENT input
second = input.nextline()
if(second.equals("exit")){
//return to start menu
input.close();
return;
}
写一个方法
public boolean isExit(String value) {
return value.equals("exit");
}
然后每次都可以检查此方法
String value = input.nextLine();
if (!isExit(value) {
// Handle the normal text
} else {
// Handle the exit operations...
}
您可以在检查中添加额外的代码,但我更希望有一个额外的方法来处理退出操作…例如
String value = input.nextLine();
if (!isExit(value) {
// Handle the normal text
} else {
doExit();
}
public int selectYourMeal() {
// Prompt...
int option = -1;
String value = input.nextLine();
if (!isExit(value) {
// Handle the normal text
} else {
option = EXIT_OPTION;
}
return option;
}
查看更多详细信息
已更新
专注于一种方法应该只做一项工作并且没有副作用的想法
话虽如此,我将设置我的代码,如果用户在提示下输入exit
,该方法可以自动退出,而无需返回代码>语句
例如
String value = input.nextLine();
if (!isExit(value) {
// Handle the normal text
} else {
doExit();
}
public int selectYourMeal() {
// Prompt...
int option = -1;
String value = input.nextLine();
if (!isExit(value) {
// Handle the normal text
} else {
option = EXIT_OPTION;
}
return option;
}
其中,EXIT_OPTION
是一个特殊值,调用者可以根据自己的需要识别和处理它
我也是老派,因为我被教导一个方法应该有一个入口和一个出口点,你真的想避免在你的方法中有多个出口点,因为遵循逻辑变得非常困难…写一个方法
public boolean isExit(String value) {
return value.equals("exit");
}
然后每次都可以检查此方法
String value = input.nextLine();
if (!isExit(value) {
// Handle the normal text
} else {
// Handle the exit operations...
}
您可以在检查中添加额外的代码,但我更希望有一个额外的方法来处理退出操作…例如
String value = input.nextLine();
if (!isExit(value) {
// Handle the normal text
} else {
doExit();
}
public int selectYourMeal() {
// Prompt...
int option = -1;
String value = input.nextLine();
if (!isExit(value) {
// Handle the normal text
} else {
option = EXIT_OPTION;
}
return option;
}
查看更多详细信息
已更新
专注于一种方法应该只做一项工作并且没有副作用的想法
话虽如此,我将设置我的代码,如果用户在提示下输入exit
,该方法可以自动退出,而无需返回代码>语句
例如
String value = input.nextLine();
if (!isExit(value) {
// Handle the normal text
} else {
doExit();
}
public int selectYourMeal() {
// Prompt...
int option = -1;
String value = input.nextLine();
if (!isExit(value) {
// Handle the normal text
} else {
option = EXIT_OPTION;
}
return option;
}
其中,EXIT_OPTION
是一个特殊值,调用者可以根据自己的需要识别和处理它
我也是一个老派,因为我被教导一个方法应该有一个入口和一个出口点,你真的想避免在你的方法中有多个出口点,因为它变得很难遵循逻辑…我建议你使用一组单词。您可以返回它。此外,关闭扫描仪
包装系统是一个非常糟糕的主意。在
中,一旦关闭,就无法重新打开它
List<String> words = new ArrayList<>();
Scanner input = new Scanner(System.in);
for (int i = 0; input.hasNextLine(); i++) {
String line = input.nextLine();
words.add(line);
if (line.equalsIgnoreCase("exit")) {
break;
}
}
System.out.println(words);
return words;
List words=new ArrayList();
扫描仪输入=新扫描仪(System.in);
for(int i=0;input.hasNextLine();i++){
String line=input.nextLine();
添加(行);
if(行相等信号(“退出”)){
打破
}
}
System.out.println(字);
返回单词;
我建议你使用一系列单词。您可以返回它。此外,关闭扫描仪
包装系统是一个非常糟糕的主意。在
中,一旦关闭,就无法重新打开它
List<String> words = new ArrayList<>();
Scanner input = new Scanner(System.in);
for (int i = 0; input.hasNextLine(); i++) {
String line = input.nextLine();
words.add(line);
if (line.equalsIgnoreCase("exit")) {
break;
}
}
System.out.println(words);
return words;
List words=new ArrayList();
扫描仪输入=新扫描仪(System.in);
for(int i=0;input.hasNextLine();i++){
String line=input.nextLine();
添加(行);
if(行相等信号(“退出”)){
打破
}
}
System.out.println(字);
返回单词;
如果我理解正确,我建议使用do while循环。它将第一次获取文本,执行一个操作,如果退出,它将中断循环,否则它将重复
do{
text = input.nextLine();
//whatever code you want here to perform with input
}while(!(text.equals("exit"));
如果我理解正确,我建议使用do while循环。它将第一次获取文本,执行一个操作,如果退出,它将中断循环,否则它将重复
do{
text = input.nextLine();
//whatever code you want here to perform with input
}while(!(text.equals("exit"));
我不知道您要创建什么,但您可以创建一个包含问题序列的数组,并使用for/while循环遍历它们,在循环体中,有一个if语句用于检查exit。我不知道您要创建什么,但您可以创建一个包含问题序列的数组,然后使用for/while循环遍历它们,在循环体中,有一个if语句用于检查exit。我认为问题在于,我需要从正在运行的整个方法返回。我一开始忘记添加它(现在编辑),但是if语句有一个返回代码>语句以中断整个方法。还有别的办法吗?如果我将return语句放在另一个方法中,它只会从该方法中返回,而且我必须编写另一个if语句来检查第二个方法的返回值,这样就不会为我保存任何代码。如果我有什么错误,请告诉我。好的,方法应该只做一项工作。在这里,我说,isExit
应该返回boolean
,只有当提供的值等于exit
时。您可以在方法的else
部分中放置return
语句,但我更希望将逻辑语句包含在的上下文中!isExit
部分,这样就不会发生其他操作,并且该方法可以正常退出…好的,我想我看到了您的推理。因此,在这种情况下,每次我提示用户时,我都会调用一个单独的方法,并从这些方法内部调用isExit方法,对吗?但是,在我需要的更高层次上,我如何避免同样的问题呢