为什么即使不满足循环内设置的条件,也会打印出我的循环错误消息

时间:2016-10-12 16:41:36

标签: java loops

以下是我的代码片段:

while (true){
        System.out.println("---Welcome to the Shape Machine---");
        System.out.println("Available options:");
        System.out.println("Circles");
        System.out.println("Rectangles");
        System.out.println("Triangles");
        System.out.println("Exit");
        //asks for selection
        String option = console.next();

        while (!option.equals("Cirlces") && !option.equals("Rectangles") && !option.equals("Triangles") && !option.equals("Exit")){
            System.out.println("#ERROR Invalid option. Please try again.");
            break;
            } 

        switch (option) {

        case "Circles": {

我有一个菜单设置,当用户输入任何不是其中一个选项时,它应该打印出错误信息并将用户带回菜单。这按预期工作,但如果我输入正确的输入错误消息仍然打印出来,但switch语句运行就像没有错误并进行必要的计算。我尝试在if else语句中使用while true循环,但我仍然遇到了同样的问题。我也尝试使用OR运算符而不是AND运算符,同时使用!=而不是!()。equals方法。我不知道该怎么做才能修复它。任何帮助将非常感谢。

1 个答案:

答案 0 :(得分:1)

我会在这里疯狂猜测并试图找出你想要完成的事情。

试试这个:

while (true){

        System.out.println("---Welcome to the Shape Machine---");
        System.out.println("Available options:");
        System.out.println("Circles");
        System.out.println("Rectangles");
        System.out.println("Triangles");
        System.out.println("Exit");
        //asks for selection
        String option = console.next();

        switch (option) {

        case "Circles": 
             //do something
              break;
        case "Rectangles":
              break;
        case "Triangles":
              break;
        case "Exit":
              break;
        default:
              System.err.println("#ERROR Invalid option. Please try again.");

        }
     //now you can either put a flag or change the code to a DO..While 
     //depending on if you want to re-execute after each option..

}

如果你想要一个if语句,你会想做(跟随你的版本):

if (!option.equals("Cirlces") && !option.equals("Rectangles") && !option.equals("Triangles") && !option.equals("Exit")){
    //print the error, then continue
}

或者,更容易阅读

if( ! ( (option.equals("Circles") || option.equals("Rectangles") || option.equals("Triangles") || option.equals("Exit") ) ){
    //print the error, then continue
}

另外请确保您正在阅读正确的值,尝试将其打印出来并进行检查。

如果这不起作用,则您提供的代码中必定存在错误,在这种情况下请发布MCVE