我正在尝试为我的练习准备一个程序流程图,在那里我遇到以下情况,我需要用户输入一个字符串值作为输入"是"或" Y'#34;和"不"或" N"并根据其输入,应用程序将从某一点终止或重新启动,直到现在我在脑海中以此为例
public class ApplicationName {
public static void main(String args[]) {
String restartOperation;
do {
restartOperation = Confirm_Before_Exit();
} while (!restartOperation.equals("No"));
//Rest of code
}
public static void Some_Operation() {
//Executed when called before closing application
}
public static String Confirm_Before_Exit() {
Scanner inputData = new Scanner(System.in);
String answer;
System.out.println("Do you want to perform another operation ?" + " " + "Y" + " " + "N");
answer = inputData.nextLine();
switch (answer) {
case "Y":
case "Yes":
Some_Operation();
break;
default:
System.out.println("Good Bye !");
}
return answer;
}
}
直到用户没有输入为"否"但显然如果进入" N"或者是小的" n"甚至"不"但是对于时间安排我只是在尝试" No"和" N"作为输入值。
答案 0 :(得分:1)
我会做这样的事情。您将答案小写以考虑YE,NO等情况。然后指定n和no。默认值应该是全部捕获。
url: baseUri + 'modules/loyalty/LoyaltyModule.php'
答案 1 :(得分:1)
将您的行为更改为以下内容:
do {
restartOperation = Confirm_Before_Exit();
} while (!restartOperation.equalsIgnoreCase("No") && !restartOperation.equalsIgnoreCase("n"));
答案 2 :(得分:0)
您可能希望使用 Regex 进行文本匹配(它包含在默认的Java-JDK中,而不是外部库中)。它非常强大。
您可以在Regex语法中定义要搜索的指针,例如:
^
它匹配以n
开头(?
)然后最终(o
)后跟$
的文字(但不一定要在那里),之后文本结束(/i
)。还有一个不区分大小写匹配Regex
的标志。您可以在 regex101.com 上试用String input = ...
Pattern pattern = Pattern.compile("^no?$", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
// User want's to cancel
...
} else {
// User want's to continue
...
}
。试试这个:regex101.com/r/edrehj
好的,如何在 Java 中使用这些东西?相当容易:
private boolean doesUserWantToCancel(final String textInput) {
Pattern pattern = Pattern.compile("^no?$", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(textInput);
return matcher.find();
}
Wikipedia#Regex,Java-API#Pattern和Java-API#Matcher的更多信息。
你也可以将它放在一个自己的方法中,使用起来更方便,用户友好:
...
} while (!doesUserWantToCancel(restartOperation));
...
然后,您只需调用输入方法:
{{1}}
答案 3 :(得分:0)
如果我正确理解您的问题,您希望在重新启动操作时运行Confirm_Before_Exit()
?
这是我要做的。您应该string restartOperation
而不是boolean restartOperation
。这样你就可以处理真或假。
在Confirm_Before_Exit()
功能中,我仍会将.toLowerCase()
添加到您的inputData
,以考虑奇怪的情况。我添加了两个布尔answer
和inValidAnswer
。
如果您想要执行其他操作,您希望您的答案成立。如果它是假的,它将退出。
如果用户输入错误,inValideAnswer
将被设置为true,他们将收到错误,指出无效答案,并会被重新提示。
public class ApplicationName {
public static void main(String args[]) {
boolean restartOperation;
do {
restartOperation = Confirm_Before_Exit();
} while (restartOperation);
//Rest of code
}
public static void Some_Operation() {
//Executed when called before closing application
}
public static boolean Confirm_Before_Exit() {
Scanner inputData = new Scanner(System.in);
boolean answer;
boolean validAnswer;
while(inValideAnswer){
System.out.println("Do you want to perform another operation ?" + " " + "Y" + " " + "N");
string userInput = inputData.nextLine().toLowerCase();
switch (userInput) {
case "y":
case "yes":
Some_Operation();
answer = true;
inValideAnswer = false;
break;
case "n":
case "no":
answer = false;
inValideAnswer = false;
System.out.println("Good Bye !");
break;
default:
System.out.println("Not a valid reponse");
inValideAnswer = true;
}
}
return answer;
}
}