如何在Solids对象数组中正确查找最小volume属性值?
修复Solids数组最小volume查找逻辑的问题
你的代码有两个关键问题导致无法正确找到最小值,调整方法如下:
问题1:初始值设置错误
原代码把minval初始化为0,这会引发两种错误:
- 如果数组中所有Solids的
volume都小于0,最终返回的0完全不符合实际最小值; - 就算所有
volume都是正数,初始值0并非数组内的真实元素,会干扰第一次比较的逻辑。
修复:将minval初始化为数组第一个有效元素的volume值,即x[0].getVolume(),确保初始值是数组内的真实数据。
问题2:比较逻辑完全颠倒
原代码的判断条件if (minval < x[i].getVolume())是当当前minval小于元素volume时更新,这本质是找最大值的逻辑,完全搞反了查找最小值的逻辑。
修复:把条件改成if (x[i].getVolume() < minval),也就是当当前元素的volume比minval更小时,才更新minval。
另外,循环边界i<=xlast-1可以简化为i<xlast,写法更简洁直观。
修复后的完整代码
public static double findMinVolume(Solids[] x, int xlast) { // 用数组第一个元素的volume初始化minval double minval = x[0].getVolume(); // 从第二个元素开始遍历(从0开始也不影响结果,但稍显冗余) for (int i = 1; i < xlast; i++) { if (x[i].getVolume() < minval) { minval = x[i].getVolume(); } } return minval; }
额外注意事项
- 要确保传入的数组
x不为空,且xlast大于0,避免数组越界异常; - 如果需要处理空数组的场景,可以在方法开头增加判断,比如抛出异常或者返回
Double.NaN这类标识值。
内容的提问来源于stack exchange,提问作者Thomas Hutton
相关产品推荐
相关产品推荐

