将字母转为大写或小写时出现“需要常量表达式”错误

此方法对于某种类型的字符串返回 true 或 false(例如 - Y 或 N(但不总是 Y 和 N))。该方法应忽略字母的大小写,如果是 Y,则应返回 true,如果是 N,则应返回 false。如果不满足Y或N,则提示用户输入有效值(即Y或N)并在同一方法中调用相同的方法。但是当我在该方法中传递值和 2 个选项时,它给出了“需要常量表达式”错误

我尝试使用常量值而不是传递 Y 和 N 作为参数 - 它有效但它总是不是 Y 和 N,它也可能是男性或女性,所以为了使该代码块可重复使用,我正在尝试这种方法

boolean boolHatchedBack = validation.checkTrueFalse(hatchedBack,"N","Y");

boolean boolAC =validation.checkTrueFalse(ac,"Male","Female");


public boolean checkTrueFalse(String value,String opt1,String opt2){


        while (true){


            switch (value) {


                case opt1.toLowerCase():


                case opt1.toUpperCase():


                    return false;


                case opt2.toLowerCase():


                case opt2.toUpperCase():


                    return true;


                default:


                    System.out.print("Invalid Value, Please re-enter(Y/N) : ");


                    String val = input.nextLine();


                    checkTrueFalse(val,opt1,opt2);


            }



        }


}

预期结果应该是向 main 方法返回 true 或 false 布尔值。


莫回无
浏览 46回答 2
2回答

慕工程0101907

Switch case 语句应该是一个可以在编译时计算的值。您的 case 语句 opt1.toLowerCase() 只能在运行时评估。这就是错误“需要常量表达式”的原因。您应该针对您的用例使用 if 语句。

千万里不及你

开关case的 应该是一个常数。根据 Oracle文档:原始类型或 String 类型的变量是最终变量,并使用编译时常量表达式(第 15.28 节)进行初始化,称为常量变量。而在您的代码中opt1和opt2不是常量。这就是您收到此编译错误的原因。因此,在这里使用if-elseIf-else将是一个更好的选择。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java