calculateCost方法中costOfTruck未随minimumTemperature更新问题
问题分析与修复:calculateCost()成本不随温度变化的原因
嘿,我一眼就看穿问题所在了——这是Java里整数除法的截断特性在作祟!咱们来仔细捋一捋:
先看你代码里的核心计算行:
double costOfTruck = 900 + 200 * (Math.pow(0.7, (minimumTemperature / 5)));
你的minimumTemperature是int类型,当你执行minimumTemperature / 5时,Java会触发整数除法:不管小数部分是多少,都会直接截断,只保留整数结果。举几个例子你就懂了:
- 温度=5 → 5/5=1
- 温度=7 → 7/5还是1(0.4的小数部分直接丢了)
- 温度=9 → 9/5依然是1
- 只有温度到10的时候,10/5=2,指数部分才会变
这就导致只要温度在同一个5的区间里(比如0-4、5-9、10-14),计算出来的指数值完全一致,最终成本自然不会随温度变化,哪怕控制台显示温度已经改了也没用。
两种简单的修复方案
你只需要让除法变成浮点除法就行,有两种常见的实现方式:
方案一:把除数改成浮点数
直接把5改成5.0,这样Java就会自动把被除数也转为浮点数进行计算:
public double calculateCost() { int minimumTemperature = this.getTemperature(); System.out.println("Temp is: " + minimumTemperature); // 把5改成5.0,触发浮点除法 double costOfTruck = 900 + 200 * (Math.pow(0.7, (minimumTemperature / 5.0))); System.out.println("Cost is: " + costOfTruck); return costOfTruck; }
方案二:强制转换温度为浮点数
先把minimumTemperature转成double类型,后续计算就不会有整数截断的问题:
public double calculateCost() { int minimumTemperature = this.getTemperature(); System.out.println("Temp is: " + minimumTemperature); // 先转成double再计算 double tempDouble = minimumTemperature; double costOfTruck = 900 + 200 * (Math.pow(0.7, (tempDouble / 5))); System.out.println("Cost is: " + costOfTruck); return costOfTruck; }
修复之后再测试,比如温度是7的话,7/5.0=1.4,Math.pow(0.7,1.4)和Math.pow(0.7,1)的结果完全不同,成本就能跟着温度正确变化啦!
内容的提问来源于stack exchange,提问作者MrShippopi
相关产品推荐
相关产品推荐

