我有以下代码:
public void add (int value)
{
if (numElements == list.length)
System.out.println("Can't add, list is full");
else
{
int hold=0;
for (int j = 0; j < numElements; j++)
{
int temp = list[j];
if (temp <= value)
{
hold = j;
}
}
System.arraycopy(list,hold, list, hold+1 ,numElements-hold);
list[hold] = value;
for (int i = 0; i< list.length; i++)
System.out.print(list[i] + ", ");
System.out.println();
numElements++;
}
}
目的是将数组中的整数放在从最小到最大的正确位置(插入排序)。
当我运行以下测试代码时:
myList.add(100);
myList.add(50);
myList.add(200);
myList.add(25);
结果数组为:[25,50,200,100]
每次调用方法后调试时,数组都是:
[100,0,0,0,0,0,0,0,0,0]
[50,100,0,0,0,0,0,0,0,0]
[50,200,100,0,0,0,0,0,0,0]
[25,50,200,100,0,0,0,0,0,0]
正如您所看到的那样,当试图输入200时会发生错误。
我需要一些帮助解决这个问题...谢谢!
答案 0 :(得分:0)
arraycopy()
电话没问题。问题是,如果正确的插入点位于列表中的所有元素之后,则循环将不会确定这一点。
您可以尝试以下方式:
for(hold = 0; hold < numElements; ++hold) {
if(list[hold] > value) break;
}