2013-02-14 45 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; 
}