切换语句错误?错误:可能尚未初始化局部变量medName

问题描述 投票:0回答:2

我是Java的新手,似乎正在努力使用switch语句。这一切对我来说都是正确的,无法弄清楚。非常感谢所有帮助。

 public static String chooseMedicine()
      {
        System.out.println("Choose a medicine to prescribe for the patient.");
        int medicineNbr = keyboard.nextInt();
        String medicineString = determineMedicine(medicineNbr);
        System.out.println(medicineString + ". Good choice.");
        return medicineString;
      }

      public static String determineMedicine(int medicine)
      { 
        String medName;
        switch(medicine)
        { 
          case 1: medName = MEDICINE_1;
          break;
          case 2: medName = MEDICINE_2;
          break;
          case 3: medName = MEDICINE_3;
          break;
          case 4: medName = MEDICINE_4;
          break;
          case 5: medName = MEDICINE_5;
          break;
          default: System.out.println("Please enter a number between 1-5");
          break;
        }
        return medName; **//Error: The local variable medName may not have been initialized**
      }
java
2个回答
1
投票

在默认情况下,您不会为medName分配任何值,但您可以访问它。因此错误。如果要访问它,请确保在每个分支中分配它:

default: System.out.println("Please enter a number between 1-5");
    medName = "Unknown";
break;

如果无法达到该分支,则抛出异常:

default: throw new IllegalStateException("Number must be between 1 and 5");

或者更好,在开始时检查方法的输入:

if (medicine < 1 || medicine > 5) {
    throw new IllegalArgumentException("Number must be between 1 and 5");
}

然后在默认情况下抛出一个AssertionError,它表示一个永远不可以访问的位置(如果它代表代码中的错误):

default: throw new AssertionError("Argument check did not work, something is wrong");

1
投票

如果您遇到默认情况,您的medName变量将没有值。您应该将medName变量的值设置为允许调用者知道传入的给定参数不存在药物的值

default: 
    medName = "Invalid Medicine Value";
    System.out.println("Please enter a number between 1-5");
break;

您也可以简单地将变量medName初始化为字符串,并避免出现问题

String medName = "NULL Medicine";
switch(medicine)...
© www.soinside.com 2019 - 2024. All rights reserved.