如何在每个步骤后检查相同的条件,而不在Java中反复重复相同的代码?

如何在每个步骤后检查相同的条件,而不在Java中反复重复相同的代码?,java,console,Java,Console,在我的控制台应用程序中,我为用户提供了在任意点键入“exit”以返回主菜单的选项。当用户输入数据时,我会通过控制台提示他/她各种事情,并使用扫描仪收集数据 我的问题是,如何检查用户是否在每次提示后输入“exit”(与请求的信息相反),而不必在每个步骤后使用相同的if语句 在我看来,任何类型的while或for循环都是不够的,因为它们只在开始时检查条件,而我需要检查输入之间的条件,并且我需要每个输入/提示在每次迭代中只执行一次 这里的关键是,检查之间执行的每个提示/代码都是不同的,因此循环无法工作

在我的控制台应用程序中,我为用户提供了在任意点键入“exit”以返回主菜单的选项。当用户输入数据时,我会通过控制台提示他/她各种事情,并使用
扫描仪
收集数据

我的问题是,如何检查用户是否在每次提示后输入“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方法,对吗?但是,在我需要的更高层次上,我如何避免同样的问题呢