0

我有以下代码:

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 时,错误正在发生。

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

4

1 回答 1

0

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

您可以尝试以下方法:

for(hold = 0; hold < numElements; ++hold) {
   if(list[hold] > value) break;
}
于 2013-02-14T03:25:49.880 回答