如何使用String变量作为循环目的的条件

时间:2016-10-01 18:37:07

标签: java

我正在尝试为我的练习准备一个程序流程图,在那里我遇到以下情况,我需要用户输入一个字符串值作为输入"是"或" 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"作为输入值。

4 个答案:

答案 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#RegexJava-API#PatternJava-API#Matcher的更多信息。

你也可以将它放在一个自己的方法中,使用起来更方便,用户友好:

...
} while (!doesUserWantToCancel(restartOperation));
...

然后,您只需调用输入方法:

{{1}}

答案 3 :(得分:0)

如果我正确理解您的问题,您希望在重新启动操作时运行Confirm_Before_Exit()

这是我要做的。您应该string restartOperation而不是boolean restartOperation。这样你就可以处理真或假。

Confirm_Before_Exit()功能中,我仍会将.toLowerCase()添加到您的inputData,以考虑奇怪的情况。我添加了两个布尔answerinValidAnswer

如果您想要执行其他操作,您希望您的答案成立。如果它是假的,它将退出。

如果用户输入错误,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;
  }



}