我是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**
}
在默认情况下,您不会为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");
如果您遇到默认情况,您的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)...