Java方法使用arraycopy不工作

时间:2013-02-14 03:01:40

标签: java arrays sorting arraycopy

我有以下代码:

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时会发生错误。

我需要一些帮助解决这个问题...谢谢!

1 个答案:

答案 0 :(得分:0)

arraycopy()电话没问题。问题是,如果正确的插入点位于列表中的所有元素之后,则循环将不会确定这一点。

您可以尝试以下方式:

for(hold = 0; hold < numElements; ++hold) {
   if(list[hold] > value) break;
}