即使用户输入正确的字符,也会继续循环

时间:2017-11-21 03:28:38

标签: java while-loop switch-statement

我已经被困在这一段时间了,并且想知道是否有人能指导我。 我试图让用户输入一个字符,如果它与其中一个开关案例不匹配,那么它应该继续询问用户。我的代码确实很好。当用户尝试输入正确的字符并且我的代码继续输出默认值而不是特定情况时,会出现此问题。 任何帮助,将不胜感激! 谢谢

 while(!flag){
            switch (endChar) {
                case 'T':
                case 't':
                    modFlags[0] = true;
                    flag = true;
                    break;
            case 'P':
            case 'p':
                modFlags[1] = true;
                flag = true;
                break;

            case 'W':
            case 'w':
                modFlags[2] = true;
                flag = true;
                break;

            case 'L':
            case 'l':
                modFlags[3] = true;
                flag = true;
                break;

            case 'I':
                System.out.print("sd");
                fileName = updateFileName(sc, fileName);
                flag = true;
                break;
            case 'i':
                fileName = updateFileName(sc, fileName);
                flag = true;
                break;

            case 'O':
            case 'o':
                break;

            case 'D':
            case 'd':
                break;

            case 'M':
            case 'm':
                modeBoth = true;
                flag = true;
                break;

            case 'H':
            case 'h':
                showMenu = false;
                flag = true;
                break;

            default:
                System.out.println("Unknown Option.");
                System.out.print("Enter action: ");
                sc.next();
                break;
               // flag = false;
        }

    }

2 个答案:

答案 0 :(得分:1)

根据您提供的内容,我建议将扫描值部分移动到while循环的最开头,并在默认情况下将switch语句仅使用continue;将您带回到开头while循环。这样,它将从输入中读取另一个值而无需再次编码。

while(!flag){
        System.out.print("Enter action: ");
        endChar = sc.next().charAt(0);
        switch (endChar) {
        case 'T':
        case 't':
            modFlags[0] = true;
            flag = true;
            break;
        case 'P':
        case 'p':
            modFlags[1] = true;
            flag = true;
            break;

        case 'W':
        case 'w':
            modFlags[2] = true;
            flag = true;
            break;

        case 'L':
        case 'l':
            modFlags[3] = true;
            flag = true;
            break;

        case 'I':
            System.out.print("sd");
            fileName = updateFileName(sc, fileName);
            flag = true;
            break;
        case 'i':
            fileName = updateFileName(sc, fileName);
            flag = true;
            break;

        case 'O':
        case 'o':
            break;

        case 'D':
        case 'd':
            break;

        case 'M':
        case 'm':
            modeBoth = true;
            flag = true;
            break;

        case 'H':
        case 'h':
            showMenu = false;
            flag = true;
            break;

        default:
            continue;
    }

}

答案 1 :(得分:1)

更改

 sc.next();

切换到

的底部附近
 endChar = sc.next().charAt(0);

因为您当前所做的一切都是从String检索Scanner而没有对其进行任何操作。如果希望String的值在循环的下一次迭代中不同,则需要将endChar的字符分配给endChar