**已关闭。**此问题为not reproducible or was caused by typos。它目前不接受回答。
此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
2天前关闭。
Improve this question的
所以我写了两个程序来做同样的事情。其中一个使用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);
}
个字符
为什么使用if-else而不是switch-case时需要为totalBill初始化一个值。
当我试图在if-else中不初始化totalBill的值时,我得到一个错误,说变量没有初始化。
3条答案
按热度按时间hsvhsicv1#
有一个通过'if-else'代码的路径,您试图打印出'totalBill'的值,该值从未分配给。这是执行最后一个'else'子句时的路径。
在'switch'代码中没有这样的路径。您可以指定一个值,或者在打印总数(未显示)之前从“默认”情况返回。
因此,这两种实现方式是不等同的。只有你知道哪一个有预期的行为。
monwx1rj2#
最后一个
printf
可能遇到未初始化的变量。如果在默认情况下使用break
而不是return
,则会遇到相同的问题。yhxst69z3#
这里你有一个编译器所指控的错误,问题本身是在指令“System.out.printf(“Your bill is $%.2f%n”,totalBill);”,而第二个程序没有,当试图将此添加到第二个程序时,您将得到相同的错误。