1. ホーム
  2. java

[解決済み] 文字を大文字にしたり小文字にしたりする際に「定数式が必要です」というエラーが発生する。

2022-02-07 18:38:55

質問内容

このメソッドは、特定のタイプのString(例えば、YまたはN(ただし、常にYおよびNではない))に対して真または偽を返します。このメソッドは、文字の大文字小文字を無視し、それがYであれば真、Nであれば偽を返さなければなりません。 YまたはNを満たさない場合、ユーザーに有効な値(つまりYまたはN)を入力するよう促し、その同じメソッドの内部を呼び出します。 しかし、そのメソッド内で値と2つのオプションを渡すと、"Constant expression required"エラーが表示されます。

YとNをパラメータとして渡すのではなく、定数値を使ってみた - うまくいった しかし、いつもYとNではなく、MaleやFemaleの可能性もあるので、このコードブロックを再利用できるようにするために、次の方法を試しています。

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 のブール値を返すことです。

どのように解決するのですか?

Switchのcase文は、コンパイル時に評価可能な値である必要があります。 opt1.toLowerCase()は、実行時にのみ評価される値です。

そのため、"constant-expression-required" というエラーが発生します。 あなたのユースケースでは、if文を使用する必要があります。