You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编程初学者求助:计费代码测试用例失败,求排查逻辑问题

问题分析:短途计费代码的错误场景

嘿,作为编程初学者碰到这种「看不到测试用例但代码报错」的情况太正常了,我帮你拆解下你的代码逻辑哪里可能踩坑:

首先先明确你的代码逻辑:

Scanner sc = new Scanner(System.in);
int a = sc.nextInt(); // first distance
int m = sc.nextInt(); // fare for distance a
int n = sc.nextInt(); // fare for remaining distance
int d = sc.nextInt(); // total distance
int fare = (a*m)+((d-a)*n);
System.out.println(fare);

你这段代码默认的计费规则是:前a个单位的里程,每个单位收m元;超过a的部分,每个单位收n元。这个逻辑在d > a的时候是没问题的(比如你给的示例1 2 3 5,计算1*2 + (5-1)*3 = 2+12=14,和输出一致),但在以下场景会直接出错:

错误场景1:总距离d ≤ a的时候

比如测试用例输入是3 10 4 2(意思是前3公里每公里10元,超过部分每公里4元,总里程2公里):

  • 你的代码计算结果是:3*10 + (2-3)*4 = 30 -4 =26
  • 但实际正确的计费应该是2*10=20(按实际里程乘单价),或者如果是「前3公里固定收30元」的规则,那正确结果是30?不管哪种,你的代码结果都不符合预期,这肯定会导致测试用例失败。

为什么会这样?因为当d ≤a时,d-a是负数,你的代码会把这部分负数乘n后加到总费用里,完全违背了计费逻辑——总里程没超过a的时候,根本不该出现「减去费用」的情况。

错误场景2:输入包含非整数里程(如果题目允许的话)

不过看你的代码用了int接收输入,要是题目里的里程可以是小数(比如1.5公里),那你的代码会直接截断小数部分,导致计算错误,但这种情况概率比第一种低,最可能触发测试用例失败的还是第一种场景。

修正建议

你需要先判断总里程d和a的大小关系:

Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int m = sc.nextInt();
int n = sc.nextInt();
int d = sc.nextInt();
int fare;
if (d <= a) {
    // 总里程没超过a,按实际里程乘m(或者如果是固定费用m的话,就直接赋值m)
    fare = d * m;
    // 如果是前a公里固定收费,改成 fare = m;
} else {
    fare = a * m + (d - a) * n;
}
System.out.println(fare);

你需要根据题目里的实际计费规则,确定d<=a时的计算方式——是按实际里程乘单价,还是固定收取前a段的费用。

内容的提问来源于stack exchange,提问作者Oompaloompa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:20:46