Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java if语句及其应写的顺序_Java_If Statement - Fatal编程技术网

Java if语句及其应写的顺序

Java if语句及其应写的顺序,java,if-statement,Java,If Statement,我需要开发一个算法来计算票价。首先,用户必须输入价格,座位位置上限=30%折扣,中间=普通,下限=25%溢价,客户类型高级=10%折扣,成人=普通 因此,一个示例测试:用户输入50表示价格,输入上限表示位置,输入高级表示客户类型,最终票价应为31.50 到目前为止,我的算法得到了35。有人能找出我的错误吗 if (cusType.charAt(0) == 'A'){ ticPrice = regTicPrice; if (location.charAt(

我需要开发一个算法来计算票价。首先,用户必须输入价格,座位位置上限=30%折扣,中间=普通,下限=25%溢价,客户类型高级=10%折扣,成人=普通

因此,一个示例测试:用户输入50表示价格,输入上限表示位置,输入高级表示客户类型,最终票价应为31.50

到目前为止,我的算法得到了35。有人能找出我的错误吗

    if (cusType.charAt(0) == 'A'){
        ticPrice = regTicPrice;

        if (location.charAt(0) == 'U'){
            ticPrice = regTicPrice * 0.7;
        }
        else if (location.charAt(0) == 'L'){
            ticPrice = regTicPrice * 1.25;
        }
        else if (location.charAt(0) == 'M'){
            ticPrice = regTicPrice;
        }
    }

    else if (cusType.charAt(0) == 'S'){
        ticPrice = regTicPrice * 0.9;

        if (location.charAt(0) == 'U'){
            ticPrice = regTicPrice * 0.7;
        }
        else if (location.charAt(0) == 'L'){
            ticPrice = regTicPrice * 1.25;
        }
        else if (location.charAt(0) == 'M'){
            ticPrice = regTicPrice;
        }
    }
    else{
     ticPrice = 0;   
    }

您的问题与您更新ticPrice有关,但在成为高级会员后,您永远不会重复使用更新后的ticPrice

你最终为你做了50*.7而不是50*.9*.7

if (cusType.charAt(0) == 'A'){
    ticPrice = regTicPrice;

    if (location.charAt(0) == 'U'){
        ticPrice = ticPrice * 0.7;
    }
    else if (location.charAt(0) == 'L'){
        ticPrice = ticPrice * 1.25;
    }
    else if (location.charAt(0) == 'M'){
        // you don't technically need this if statement at the end since it doesnt change
        ticPrice = ticPrice;
    }
}

else if (cusType.charAt(0) == 'S'){
    ticPrice = ticPrice * 0.9;

    if (location.charAt(0) == 'U'){
        ticPrice = ticPrice * 0.7;
    }
    else if (location.charAt(0) == 'L'){
        ticPrice = ticPrice * 1.25;
    }
    else if (location.charAt(0) == 'M'){
        // you dont technically need this if statement at the end since it doesnt change
        ticPrice = ticPrice;
    }
}
else{
 ticPrice = 0;   
}
使用HashMap使您的生活更简单,如下所示:

HashMap customerTypeDiscount = new HashMap<String, Double>();
customerTypeDiscount.put("Adult", 1);
customerTypeDiscount.put("Senior", 0.9);

HashMap locationDiscount = new HashMap<String, Double>();
locationDiscount.put("Upper", 0.7);
locationDiscount.put("Middle", 1);
locationDiscount.put("Lower", 1.25);

ticPrice = regTicPrice * ((Double) customerTypeDiscount.get(cusType)) * (((Double) locationDiscount.get(location));

在计算机票折扣价格时,您使用的是机票的实际价格,请在内部If中使用ticPrice,而不是下面的REGICPRICE sa:

   if (cusType.charAt(0) == 'A'){
    ticPrice = regTicPrice;
    if (location.charAt(0) == 'U'){
        ticPrice = ticPrice * 0.7;
    }
    else if (location.charAt(0) == 'L'){
        ticPrice = ticPrice * 1.25;
    }
    else if (location.charAt(0) == 'M'){
        ticPrice = ticPrice;
    }
}

else if (cusType.charAt(0) == 'S'){
    ticPrice = regTicPrice * 0.9;

    if (location.charAt(0) == 'U'){
        ticPrice = ticPrice * 0.7;
    }
    else if (location.charAt(0) == 'L'){
        ticPrice = ticPrice * 1.25;
    }
    else if (location.charAt(0) == 'M'){
        ticPrice = ticPrice;
    }
}
else{
 ticPrice = 0;   
}

检查您编写的这行代码:

ticPrice = regTicPrice * 0.9;

    if (location.charAt(0) == 'U'){
        ticPrice = regTicPrice * 0.7;
    }
价格是50英镑

ticPrice =  regTicPrice * 0.9
现在ticPrice的值为50*0.9=45

下一行是

ticPrice = regTicPrice * 0.7
Wrong ==== ticPrice = 50 * 0.7 = 35
Right ==== ticPrice = 45 * 0.7 = 31.50
您正在使用regTicPrice*0.7覆盖ticPrice:

代码应该如下所示

ticPrice = regTicPrice * 0.9;

    if (location.charAt(0) == 'U'){
        ticPrice = ticPrice * 0.7;
    }
您必须为ticPrice使用float数据类型,如果您已经在使用它,那么请尝试ticPrice=floatticPrice*0.9

重构和修复

ticPrice = 0; 

if (cusType.charAt(0) == 'A')
    ticPrice = regTicPrice;
else if (cusType.charAt(0) == 'S')
    ticPrice = regTicPrice * 0.9;

if (ticPrice > 0) {
    if (location.charAt(0) == 'U')
        ticPrice = ticPrice * 0.7;
    else if (location.charAt(0) == 'L')
        ticPrice = ticPrice * 1.25;
}

使用hashmap存储您的信息,如果cusType.charAt0=='A',则从这里选择{ ticPrice=regTicPrice

    if (location.charAt(0) == 'U'){
        ticPrice = ticPrice * 0.7;      //you made mistake here..
    }
    else if (location.charAt(0) == 'L'){
        ticPrice = ticPrice * 1.25;
    }
    else if (location.charAt(0) == 'M'){
        ticPrice = regTicPrice;
    }
}

else if (cusType.charAt(0) == 'S'){
    ticPrice = regTicPrice * 0.9;

    if (location.charAt(0) == 'U'){
        ticPrice = ticPrice * 0.7;
    }
    else if (location.charAt(0) == 'L'){
        ticPrice = ticPrice * 1.25;
    }
    else if (location.charAt(0) == 'M'){
        ticPrice = regTicPrice;
    }
}
else{
 ticPrice = 0;   
}
一旦你得到了可爱的类型Senior:50*0.9=45=ticPrice。
现在再次需要对loactionUpper应用折扣:45*0.7=31.5.=>ticPrice*0.7.而不是regTicPrice*0.7

ticPrice=regTicPrice*0.7应该是ticPrice=ticPrice*0.7;请以后使用调试器处理此类问题。好的,现在我只得到if语句后半部分的输出,如果charAt0==“S”,而不是“A”处的字符