If 语句问题,不添加值

If statement issue, not adding values

对于 if commercial 语句:

如果我为 usage 输入 1500,它会打印出

Total amount due: 22.560.0

但应该是22.5+60.0 (82.5)。关于我做错了什么有什么想法吗??

import java.util.Scanner;

public class UtilityBill {

    public static void main(String[] args) {
        // residential customer
        final double RES_RATE = 0.052;
        final double RES_FEE = 6;

        // commercial customer
        final int COM_LIMIT = 1000;
        final double COM_RATE = 0.045;
        final double COM_FEE = 60;

        // industrial customer
        final int IND_LIMIT = 5000;
        final int IND_LIMIT_2 = 1000;
        final int IND_LIMIT_3 = 3000;

        final double IND_RATE_BELOW = 0.028;
        final double IND_FEE_BELOW = 76;
        final double IND_RATE_ABOVE = 0.03;
        final double IND_FEE_ABOVE = 270;

        // user input
        Scanner kb = new Scanner(System.in);
        System.out.println("Enter the type of use ('R', 'C', or 'I'): ");
        char userType = kb.next().charAt(0);  // should be R, C, or I
        System.out.println("How much electricity do you use (in kwh)? ");
        double usage = kb.nextDouble();   // usage amount in kwh

        // if residential
        if (userType == 'R')
            System.out.println("Total amount due: " + (RES_RATE*usage)+RES_FEE);

        // if commercial
        if (userType == 'C')
            if (usage <= COM_LIMIT)
                System.out.println("Total amount due: " + COM_FEE);
            else
                System.out.println("Total amount due: " + ((usage-COM_LIMIT)*COM_RATE)+COM_FEE);

            // if industrial
        if (userType == 'I')
            if (usage <= IND_LIMIT)
                System.out.println("Total amount due: " + ((usage-IND_LIMIT_2)*IND_RATE_BELOW)+IND_FEE_BELOW);
            else
                System.out.println("Total amount due: " + ((usage-IND_LIMIT_3)*IND_RATE_ABOVE)+IND_FEE_ABOVE);

        kb.close();
    }

}

对您的问题有一个非常简单的解释。这全都与运算符的优先级有关。考虑一个简单的代码:

int a = 6;
int b = 7;
System.out.println("Sum up : " + a + b);

虽然 "Sum up : " 是一个字符串,并且 "+" 是 Java 中唯一的重载运算符,但它能够将数字连接到字符串。 在这里我们有 2 个 "+" 运算符,并且 a + b 落在 "Sum up : " + 之后,正如已经发生的那样,它也将 x 和 y 视为字符串。输出将是:

Sum up : 67

现在考虑这段代码:

int a = 6;
int b = 7;
System.out.println("Sum up : " + (a + b));

这里括号 () 有更高的优先级所以先 (a+b) 然后打印结果为 :

Sum up : 13

回到您的代码:

System.out.println("Total amount due: " + ((usage-COM_LIMIT)*COM_RATE)+COM_FEE);

现在考虑:

((usage-COM_LIMIT)*COM_RATE) -> a
COM_FEE -> b

表达式变为:

System.out.println("Total amount due: " + a + b);

这与我的第一个代码片段相似。

因此,为了获得所需的结果,您需要添加括号并转换为第二个示例案例:

System.out.println("Total amount due: " + (((usage-COM_LIMIT)*COM_RATE)+COM_FEE));

如果您在理解上有任何问题,请告诉我。