在 if else 语句中正确使用子字符串 java

Using substrings properly in an if else statement java

我想知道我的逻辑和语法对这个 if else 语句是否有意义?在查看语法时,我所有的 if 语句都有意义吗?我正在尝试使用 rentalDate 的前两个数字来确定月份并查看他们将获得哪个季节的费用。谢谢!

public 双确定价格 () {

    double price;

    if (rentalDate.substring(0,2) == ("01") || rentalDate.substring(0,2) == ("02"))
    {
        price = WINTER_CHARGE;
    }
    else if (rentalDate.substring(0,2) == ("12"))
    {
        price = WINTER_CHARGE;
    }
    else if (rentalDate.substring(0,2) == ("03") || rentalDate.substring(0,2) == ("04") || rentalDate.substring(0,2) == ("05"))
    {
        price = SPRING_CHARGE;
    }
    else if (rentalDate.substring(0,2) == ("06") || rentalDate.substring(0,2) == ("07") || rentalDate.substring(0,2) == ("08"))
    {
        price = SUMMER_CHARGE;
    }
    else
    {
        price = FALL_CHARGE;
    }

    return price;   
}

不,它们没有意义。您正在使用 reference equality 比较字符串,这是刚接触 Java.

时的常见错误

您应该更改所有语句以使用 .equals() 方法。这将比较字符串的 values,而不是 references 的值,您也可以将其视为 "pointers"如果您来自 C/C++ 背景。

基本上,这个:

rentalDate.substring(0,2) == ("01")

变成...

"01".equals(rentalDate.substring(0,2))

您可以在这里阅读更多内容:

我会在解析月份后使用开关:

// can throw NumberformatException
int rentalMonthInt = Integer.parseInt(rentalDate.substring(0,2));

switch(rentalMonthInt){
    case 1:
    case 2:
    case 12:
        return WINTER_CHARGE;
    // add more groups...
    default:
        System.out.err("month out of range..." + rentalMonthInt);
        // handle bad month
}

请注意,案例 1、2 和 12 正在执行相同的代码,因为在最后一个之前没有任何指令或 break。您可以用这种方式对月份进行分组。