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
相关产品推荐
相关产品推荐

