You need to enable JavaScript to run this app. Java自定义DynamicArray排序实现报"unexpected type"编译错误求助
优惠活动
大模型
产品
解决方案
定价
更多

Java自定义DynamicArray排序实现报"unexpected type"编译错误求助

编译报错根因

Java 语法规定,赋值操作=的左侧必须是可修改的存储位置(如变量、数组元素、对象可访问的属性),不能是方法调用返回的临时值。
你触发报错的两行代码,直接把array.get(idx)的返回值放在了赋值号左侧:

  • array.get(j-1)=array.get(j);
  • array.get(j)=a;
    而array.get(idx)是DynamicArray类定义的取值方法,执行后仅返回指定索引的int数值,是不可作为赋值目标的临时值,因此编译器抛出unexpected type、required: variable, found: value错误。
    DynamicArray类中已经实现了专门修改指定索引元素的set(int idx, int x)方法,所有修改元素的操作都需要通过该方法完成。
逻辑层面的隐藏问题

修正语法错误后,当前排序逻辑还存在两处会导致运行时崩溃的bug:

  • 内层循环起始值错误:循环从j=0开始时,代码会尝试读取array.get(j-1)也就是索引为-1的元素,直接触发数组越界异常。冒泡排序的相邻比较逻辑需要从j=1开始遍历。
  • 内层循环边界错误:当前循环终止条件为j < array.size() - i,当j走到边界值时,读取array.get(j)会因为索引超出最大有效范围(最大有效索引为size-1)触发越界。
修正后的排序方法实现
public static void testSort(DynamicArray array){
    System.out.println("Sort the array.");
    int totalSize = array.size();
    for(int i = 0; i < totalSize; i++){
        for (int j = 1; j < totalSize - i; j++){
            // 降序排列:相邻位置前值小于后值时交换
            if (array.get(j-1) < array.get(j)){
                int temp = array.get(j-1);
                array.set(j-1, array.get(j));
                array.set(j, temp);
            }
        }
    }
    System.out.println(array);
}

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 22:45:09