2014-03-06 65 views
0

我想合併這些ArrayList。 list3是最後一個。一切工作正常,但最後的數字,400,不會顯示在最終陣列。我不知道爲什麼或做什麼。我試圖讓ArrayList的排序,我幾乎完成,除了最後一個不會顯示的數字。合併與Java中的ArrayList排序

import java.util.ArrayList; 
public class TextLab12st 
{ 
    public static void main(String args[]) 
{ 
    int jsaList1[] = {101, 105, 115, 125, 145, 165, 175, 185, 195, 225, 235, 275, 305, 315, 325, 335, 345, 355, 375, 385}; 
    int jsaList2[] = {110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 270, 280, 320, 350, 400}; 

    Array list1 = new Array(jsaList1,"List #1"); 
    Array list2 = new Array(jsaList2,"List #2"); 
    Array list3 = new Array("Merged List"); 

    list3.merge(list1,list2,list3); 

    list1.display(); 
    list2.display(); 
    list3.display(); 

} 

} 

class Array 
{ 
private ArrayList<Integer> list; 
private int size; 
private String listName; 

public Array(String ln) 
{ 
    list = new ArrayList<Integer>(); 
    size = 0; 
    listName = ln; 
} 

public Array(int[] jsArray, String ln) 
{ 
    list = new ArrayList<Integer>(); 
    size = jsArray.length; 
    listName = ln; 
    for (int j = 0; j < size; j++) 
     list.add(new Integer(jsArray[j])); 
} 

public void display() 
{ 
    System.out.println("\n" + listName + ":\n"); 
    System.out.println(list + "\n"); 
} 

public void merge(Array that, Array theOther, Array result) 
{ 
    { 
     // Merge both halves into the result array 
     // Next element to consider in the first array 
     int iFirst = 0; 
     // Next element to consider in the second array 
     int iSecond = 0; 

     // Next open position in the result 
     int j = 0; 
     // As long as neither iFirst nor iSecond is past the end, move the 
     // smaller element into the result. 
     while (iFirst < that.size && iSecond < theOther.size) 
     { 
      if (that.list.get(iFirst) < theOther.list.get(iSecond)) 
      { 
       result.list.add(that.list.get(iFirst)); 
       iFirst++; 
      } 
      else 
      { 
       result.list.add(theOther.list.get(iSecond)); 
       iSecond++; 
      } 
      j++; 
     } 

    } 

} 

}

+0

有什麼錯收藏品ns.sort()? – hd1

回答

4

運行兩個數組在循環之後:

while (iFirst < that.size && iSecond < theOther.size) 
    { 
     if (that.list.get(iFirst) < theOther.list.get(iSecond)) 
     { 
      result.list.add(that.list.get(iFirst)); 
      iFirst++; 
     } 
     else 
     { 
      result.list.add(theOther.list.get(iSecond)); 
      iSecond++; 
     } 
     j++; 
    } 

你需要看看是否有留在陣列中的一個東西你已經達到的結束後,其他:

if (iFirst < that,size) { 
    //copy everything remaining in that to output 
} else if (iSecond < theOther.size) { 
    //copy everything from theOther to output 
} 
+0

謝謝,我不知道。我究竟如何複製一切? –

+0

@ima_mango - 看看System.arrayCopy() – radai

1
// this condition stops when you reach the end of either list 
// you need to continue until you reach the end of both lists 
while (iFirst < that.size && iSecond < theOther.size)