Java固定大小int数组排序后调用add方法添加元素返回值恒为0的解决办法
嘿,我来帮你解决这个问题!先梳理下核心问题,再一步步给你搞定。
问题根源分析
首先看你给出的代码片段,有个明显的语法错误:main方法的定义写错了,正确写法应该是public static void main(String[] args),这是程序运行的入口,必须先修正。
而你说调用sort后add返回始终为0,大概率是因为记录数组已添加元素数量的静态变量i被sort方法意外修改了,或者你的sort方法没有正确处理已添加元素的范围,导致add方法逻辑出错,每次都从索引0开始添加,所以返回0。
解决办法&修正后的代码
我给你写了一份修正后的完整代码,注释里标清了关键细节:
import java.util.Arrays; public class Scrap { // 初始化大小为4的int数组 private static int[] array = new int[4]; // 专门用来记录已添加元素的数量,比用i更清晰,避免混淆 private static int elementCount = 0; // 修正后的main方法,程序入口 public static void main(String[] args) { // 先添加几个测试元素 add(3); add(1); add(4); add(2); System.out.println("排序前的数组:" + Arrays.toString(array)); sort(); System.out.println("排序后的数组:" + Arrays.toString(array)); // 尝试添加新元素(此时数组已满,会返回-1) int addResult = add(5); System.out.println("添加元素的返回值:" + addResult); // 如果需要继续添加,可以开启下面的扩容逻辑 // add(6); // System.out.println("扩容后添加元素的返回值:" + addResult); } // 完善的add方法:返回添加的索引,数组满了返回-1,可选扩容 public static int add(int num) { // 可选:数组满了自动扩容,避免添加失败 if (elementCount >= array.length) { // 把数组容量扩大为原来的2倍 array = Arrays.copyOf(array, array.length * 2); System.out.println("数组已满,自动扩容为:" + array.length); } array[elementCount] = num; // 返回当前添加的索引,然后计数加1 return elementCount++; } // 你的sort方法:把最小值放到array[0],仅处理已添加的元素 public static void sort() { // 没有元素的话直接返回,避免空排序 if (elementCount == 0) return; // 找到已添加元素中最小值的索引 int minIndex = 0; for (int j = 1; j < elementCount; j++) { if (array[j] < array[minIndex]) { minIndex = j; } } // 把最小值交换到array[0]的位置 int temp = array[0]; array[0] = array[minIndex]; array[minIndex] = temp; // 如果需要完全排序而不是只把最小值放前面,可以用下面的代码 // Arrays.sort(array, 0, elementCount); } }
关键注意点
- 不要让sort方法修改计数变量:我用
elementCount代替了你原来的i,专门用来追踪已添加元素的数量,sort方法里只用局部变量做循环,绝对不会碰这个计数变量,这样排序后add方法依然能正确找到下一个要添加的位置。 - 语法错误必须修正:
main方法的定义是Java程序运行的基础,写错了根本跑不起来。 - 可选数组扩容:如果你的数组可能满了,添加
Arrays.copyOf的扩容逻辑,这样就不会出现添加失败的情况,返回值也会一直是正确的索引,而不是0或者-1。
内容的提问来源于stack exchange,提问作者Raghu Rvm
相关产品推荐
相关产品推荐

