Java方法调用故障排查:调用findLow方法时出错,无法定位问题
分析并修复你的findLow方法问题
嘿,我看了你的代码,不管是findLow方法本身还是逻辑设计,确实存在几个关键问题,导致它没法正常工作。咱们一步步拆解:
代码里的核心问题
- 变量初始化位置错误:你把
lowest和index放在了外层循环的内部,每次循环i的时候都会重置这两个变量,根本没法持续追踪整个数组里的最小值。 - 缺失最小值比较逻辑:你只获取了
current分数,但完全没有把它和当前记录的最小值做对比,也没有更新最小值的逻辑,等于白拿了这个值。 - 方法没有返回值:方法声明是
public static int findLow(...),要求返回int类型,但你的代码里没有任何return语句,这会直接导致编译错误。 - 遍历对象错误(你标注的问题位置):你在注释标注的那一行用了
hurlerArray[i].totalPoints(),但内层循环的变量是j,这意味着每次内层循环都在重复获取第i个选手的分数,完全没有遍历整个数组的其他选手,应该改成hurlerArray[j].totalPoints()。 - 未使用的变量:
current变量被赋值了但没用到,这会触发编译警告,也说明逻辑没走通。
修复后的完整代码
import java.util.Scanner; public class HurlerUse { static Hurler[] hurlerArray; // 查找最低分的静态方法(已修复) public static int findLow(Hurler[] hurlerArray) { // 先处理空数组的边界情况,避免空指针异常 if (hurlerArray == null || hurlerArray.length == 0) { throw new IllegalArgumentException("选手数组不能为空或长度为0"); } // 初始化最小值为第一个选手的分数,对应索引为0 int lowest = hurlerArray[0].totalPoints(); int index = 0; // 从第二个元素开始遍历比较 for (int j = 1; j < hurlerArray.length; j++) { int current = hurlerArray[j].totalPoints(); // 如果当前分数比记录的最小值小,更新最小值和对应索引 if (current < lowest) { lowest = current; index = j; } } // 这里返回的是最低分选手的索引,如果需要返回分数本身,直接return lowest即可 return index; } }
关于totalPoints()的额外检查
你怀疑这个方法可能有问题的话,可以单独测试它:创建一个Hurler对象,手动设置分数属性,调用totalPoints()看返回值是否符合你的预期。如果这个方法的计算逻辑有误,那findLow拿到的结果也会不准确。
内容的提问来源于stack exchange,提问作者Aoife Ellen Ryan
相关产品推荐
相关产品推荐

