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

如何实现寻找动态数组最大值的函数?现有代码求修正

动态数组最大值查找代码修正

我刚接触用动态数组替代普通数组,写了一段查找动态数组最大值的代码,但运行有问题,希望能得到修正帮助。

我的现有代码如下:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:52:47