提问人:hi hi 提问时间:7/30/2023 更新时间:7/30/2023 访问量:38
为什么在使用 if else 语句时需要初始化 totalBill 的值,但在使用 switch case [closed] 时不需要初始化
Why do I need to initialize a value for totalBill when using if else statement but not when using switch case [closed]
问:
所以我写了两个程序来做同样的事情。其中一个使用 if-else,而另一个使用 switch-case。
public static void calcBill(String userChoice, int userMinute){
double PackageArate = 39.99;
double PackageBrate = 59.99;
double PackageCrate = 69.99;
int PackageAmins = 450;
int PackageBmins = 900;
double totalBill = 0.0;
if(userChoice.equals("A")){
if(userMinute > PackageAmins){
int extraMins = userMinute - PackageAmins;
totalBill = PackageArate + (extraMins * 0.45);
} else {
totalBill = PackageArate;
}
} else if (userChoice.equals("B")){
if(userMinute > PackageBmins){
int extraMins = userMinute - PackageBmins;
totalBill = PackageBrate + (extraMins * 0.40);
} else{
totalBill = PackageBrate;
}
} else if(userChoice.equals("C")){
totalBill = PackageCrate;
} else{
System.out.print("Invalid input.");
}
System.out.printf("Your bill is $%.2f%n", totalBill);
}
public static void calcBill(String packageChoice, int minutes){
double packageArate = 39.99;
double packageBrate = 59.99;
double packageCrate = 69.99;
int packageAmins = 450;
int packageBmins = 900;
double totalBill;
switch(packageChoice){
case "A":
if(minutes > packageAmins){
int extraMinutes = minutes - packageAmins;
totalBill = packageArate + (extraMinutes * 0.45);
}
else{
totalBill = packageArate;
}
break;
case "B":
if(minutes > packageBmins){
int extraMinutes = minutes - packageBmins;
totalBill = packageArate + (extraMinutes * 0.40);
}
else{
totalBill = packageBrate;
}
break;
case "C":
totalBill = packageCrate;
break;
default:
System.out.print("Invalid choice.");
return;
}
为什么在使用 if-else 而不是 switch-case 时需要初始化 totalBill 的值。
当我尝试不在 if-else 中初始化 totalBill 的值时,我收到一个错误,说该变量未初始化。
答:
0赞
Joop Eggen
7/30/2023
#1
最后一种可能遇到未初始化的变量。如果不是在默认值中执行 a,则会遇到相同的问题。printf
return
break
1赞
Arfur Narf
7/30/2023
#2
在“if-else”代码中有一条路径,您可以在其中尝试打印出“totalBill”的值,该值从未分配给该值。这是执行最终“else”子句时的路径。
“switch”代码中没有这样的路径。要么分配一个值,要么在打印总计之前从“默认”情况返回。
因此,这两种实现并不等效。只有您知道哪一个具有预期的行为。
-1赞
Glauber Faria
7/30/2023
#3
在这里,编译器指责了一个错误,其中问题本身出在第二个程序没有的指令“System.out.printf(”Your bill is $%.2f%n“,totalBill);”中,当尝试将其添加到第二个程序时,您将得到相同的错误。
评论
switch
totalBill
if
System.out.printf("Your bill is $%.2f%n", totalBill);
return;
else
System.out.print("Invalid input.");
default
switch
break
return
double totalBill;