2013-02-14 43 views
0

我有以下代码:Java方法使用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试图放入时发生的错误。

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

回答

0

arraycopy()呼叫很好。问题是,如果正确的插入点位于列表中的所有元素之后,那么您的循环将不会确定这一点。

你可以尝试这样的:

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