如何实现寻找动态数组最大值的函数?现有代码求修正
动态数组最大值查找代码修正
我刚接触用动态数组替代普通数组,写了一段查找动态数组最大值的代码,但运行有问题,希望能得到修正帮助。
我的现有代码如下:
public static int max(DynamicArray arr) { //TODO Find and return the largest number in the array int base = 0; for (int i = 0; i == arr.size(); i++){ // compare values if (base < arr.indexOf(i)){ // replace the base number with the highest number base += arr.indexOf(i); } } // return highest number return base; } private int size = 0; // 用户感知的数组大小 public int size(){ return size; } public int indexOf(E element){ //TODO((3)) for(int i = 0; i < size; i++){ if(data[i].equals(element)){ return i; } } return -1; }
主调用代码:
// 调用最大值查找的代码 DynamicArray<Integer> highNumberArray = new DynamicArray<Integer>(); Random randGen = new Random(); for(int i = 0; i < 14; i++) { highNumberArray.add(randGen.nextInt(100)); } System.out.println("*********"); System.out.println("数组中的最大值是: " + max(highNumberArray)); System.out.println("");
代码中的核心问题
- 循环条件完全错误:
for (int i = 0; i == arr.size(); i++)这个条件永远不会触发循环(初始i=0,只有当size=0时i==size成立,但此时数组为空也不该执行循环),正确的循环条件应该是i < arr.size()。 - 误用
indexOf方法:indexOf(E element)的作用是根据元素内容查找对应的索引,而你现在传入索引i,试图获取该位置的元素,逻辑完全搞反了。你需要给DynamicArray添加一个get(int index)方法来获取指定索引的元素。 - 最大值初始值不合理:如果数组中全是负数,初始值0会比所有元素都大,导致返回错误结果,应该用数组的第一个元素作为初始最大值。
- 最大值更新逻辑错误:
base += arr.indexOf(i)是将当前元素的值累加到base上,而不是替换成当前的最大值,正确的写法是base = 当前元素。 - 泛型未正确声明:
max方法的参数DynamicArray arr没有指定泛型类型,应该改为DynamicArray<Integer> arr,避免类型转换问题。
修正后的完整代码
首先给DynamicArray添加get方法(用于通过索引获取元素):
public E get(int index) { if (index < 0 || index >= size) { throw new IndexOutOfBoundsException("索引超出数组范围"); } return data[index]; }
然后修正max方法:
public static int max(DynamicArray<Integer> arr) { // 处理空数组的情况 if (arr.size() == 0) { throw new IllegalArgumentException("无法从空数组中获取最大值"); } // 用数组第一个元素作为初始最大值 int maxVal = arr.get(0); // 从第二个元素开始遍历比较 for (int i = 1; i < arr.size(); i++) { int currentElement = arr.get(i); if (currentElement > maxVal) { maxVal = currentElement; } } return maxVal; }
原有的size和indexOf方法可以正常保留,它们的功能和最大值查找逻辑无关。
内容的提问来源于stack exchange,提问作者Anya Dinger
相关产品推荐
相关产品推荐

