无法弄清楚为什么我的if语句不起作用

时间:2020-06-22 09:21:12

标签: java if-statement

我不知道为什么我的if语句不起作用。由于某些原因,它总是将第一个if语句评估为true,结果输出错误的值。

使用numberOfDays = 19时,它应该输出4.95,但是输出1.65,因为它将第一个if语句评估为true,并且不更改numberOf7DayPasses的值:

class TransitCalculator {

    int numberOfRides;
    int numberOfDays;
    double[] prices = { 2.75, 33.00, 127.00 };

    public TransitCalculator(int myRides, int myDays) {
        numberOfRides = myRides;
        numberOfDays = myDays;
    }

    public double unlimited7Price() {
        int numberOf7DayPasses = 1;

        if (numberOfDays % 7 != 0 && numberOfDays / 7 != 1 && numberOfDays / 7 > 1 && numberOfDays / 7 < 2) {
            numberOf7DayPasses = 2;
        } else if (numberOfDays % 7 != 0 && numberOfDays / 7 != 2 && numberOfDays / 7 > 2 && numberOfDays / 7 < 3) {
            numberOf7DayPasses = 3;
        } else if (numberOfDays % 7 != 0 && numberOfDays / 7 != 3 && numberOfDays / 7 > 3 && numberOfDays / 7 < 4) {
            numberOf7DayPasses = 4;
        } else if (numberOfDays % 7 != 0 && numberOfDays / 7 != 4 && numberOfDays / 7 > 4 && numberOfDays / 7 < 5) {
            numberOf7DayPasses = 5;
        } else if (numberOfDays % 7 == 0 && numberOfDays / 7 == 1) {
            numberOf7DayPasses = 1;
        } else if (numberOfDays % 7 == 0 && numberOfDays / 7 == 2) {
            numberOf7DayPasses = 2;
        } else if (numberOfDays % 7 == 0 && numberOfDays / 7 == 3) {
            numberOf7DayPasses = 3;
        } else if (numberOfDays % 7 == 0 && numberOfDays / 7 == 4) {
            numberOf7DayPasses = 4;
        } else if (numberOfDays % 7 == 0 && numberOfDays / 7 == 5) {
            numberOf7DayPasses = 5;
        }
        double priceOfOneRide = numberOf7DayPasses * prices[1] / numberOfRides;

        return priceOfOneRide;
    }
        
        
    public static void main(String[] args){
        TransitCalculator testPerson = new TransitCalculator(20, 19);
        System.out.println(testPerson.unlimited7Price());
    }
}

1 个答案:

答案 0 :(得分:0)

您说您认为它返回1.65是因为第一个条件被评估为真?因此,我想您没有使用调试器来遍历代码以查看实际发生的事情!

如果将第一个条件评估为true,则输出将为3.3(= 2 * 33/20) 输出为1.65,这意味着没有一个条件的计算结果为true。

第一个条件(以及第2个,第3个和第4个条件)无法求值为true,因为它们始终为false。第一个条件包含:

numberOfDays / 7 > 1 && numberOfDays / 7 < 2

NumberOfDays是一个int,因此numberOfDays / 7的结果也是一个int。 一个int不能大于1且小于2。因此条件始终为false。在第二,第三和第四条件下,数字不同,但是它们具有相同的问题。