Java if语句及其应写的顺序
我需要开发一个算法来计算票价。首先,用户必须输入价格,座位位置上限=30%折扣,中间=普通,下限=25%溢价,客户类型高级=10%折扣,成人=普通 因此,一个示例测试:用户输入50表示价格,输入上限表示位置,输入高级表示客户类型,最终票价应为31.50 到目前为止,我的算法得到了35。有人能找出我的错误吗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(
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.7ticPrice=regTicPrice*0.7应该是ticPrice=ticPrice*0.7;请以后使用调试器处理此类问题。好的,现在我只得到if语句后半部分的输出,如果charAt0==“S”,而不是“A”处的字符