Java条件语句If-Else逻辑错误排查:电脑租赁计费问题
电脑租赁计费Java代码逻辑错误:预期输出与实际不符
某电脑租赁店计费规则为:前3小时及以内按每小时常规收费(REGULAR CHARGE)计费;超出3小时的部分,按常规收费的90%(即优惠10%)计费。
我编写的Java代码如下:
System.out.print("ENTER REGULAR CHARGE: "); int charge = scan.nextInt(); System.out.print("ENTER REGULAR HOURS: "); int hours = scan.nextInt(); scan.close(); if (hours <= 3) { int bill= charge * hours; System.out.print("RENTAL BILL IS: " +bill); } else { double bill = (double) (charge * hours)-0.10; System.out.print("RENTAL BILL IS: " +bill); }当输入常规收费为4、租赁时长为10小时时,预期输出应为:
RENTAL BILL IS: 39,但实际输出为RENTAL BILL IS: 39.9。我不确定是公式还是变量使用存在问题,希望有人能指出代码中的错误。
问题根源与修正方案
你的代码核心问题出在else分支的计费公式完全不符合规则,咱们一步步理清楚:
1. 错误公式分析
你写的(double) (charge * hours)-0.10逻辑是:把所有时长按原价计算后,直接减去0.1元——这和“超出3小时的部分打9折”的规则完全不沾边。这也是为什么输入4元/小时、10小时时,你得到39.9(4*10=40,减0.1就是39.9)的原因。
2. 正确的计费逻辑
根据规则,账单应该拆成两部分计算:
- 前3小时:按原价计费,即
charge * 3 - 超出3小时的部分:按原价的90%计费,即
charge * 0.9 * (hours - 3) - 总账单 = 前3小时费用 + 超出部分费用
3. 修正后的代码
import java.util.Scanner; public class RentalCalculator { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print("ENTER REGULAR CHARGE: "); int charge = scan.nextInt(); System.out.print("ENTER REGULAR HOURS: "); int hours = scan.nextInt(); scan.close(); double bill; if (hours <= 3) { bill = charge * (double) hours; } else { // 拆分计算:前3小时原价,超出部分9折 bill = charge * 3 + charge * 0.9 * (hours - 3); } // 如果需要输出整数(比如四舍五入),可以用Math.round() System.out.println("RENTAL BILL IS: " + Math.round(bill)); // 如果允许保留小数,直接输出即可: // System.out.println("RENTAL BILL IS: " + bill); } }
补充说明
- 关于变量类型:用
double存储账单是因为9折后的费用可能是小数,避免整数运算的精度丢失; - 关于你提到的预期输出39:按照规则计算,4元/小时、10小时的正确账单应该是
4*3 + 4*0.9*7 = 12 + 25.2 = 37.2,如果需要得到39,可能是规则描述或预期值存在偏差,但代码的核心逻辑错误已经修正。
内容的提问来源于stack exchange,提问作者Liyanna
相关产品推荐
相关产品推荐

