java 为什么在使用if else语句时需要为totalBill初始化一个值,而在使用switch case [closed]时不需要

bn31dyow  于 2023-08-01  发布在  Java
关注(0)|答案(3)|浏览(116)

**已关闭。**此问题为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的值时,我得到一个错误,说变量没有初始化。

hsvhsicv

hsvhsicv1#

有一个通过'if-else'代码的路径,您试图打印出'totalBill'的值,该值从未分配给。这是执行最后一个'else'子句时的路径。
在'switch'代码中没有这样的路径。您可以指定一个值,或者在打印总数(未显示)之前从“默认”情况返回。
因此,这两种实现方式是不等同的。只有你知道哪一个有预期的行为。

monwx1rj

monwx1rj2#

最后一个printf可能遇到未初始化的变量。如果在默认情况下使用break而不是return,则会遇到相同的问题。

yhxst69z

yhxst69z3#

这里你有一个编译器所指控的错误,问题本身是在指令“System.out.printf(“Your bill is $%.2f%n”,totalBill);”,而第二个程序没有,当试图将此添加到第二个程序时,您将得到相同的错误。

相关问题