2015-04-22 42 views
4

Java新增功能。試圖理解宣佈我的ArrayList<Integer>。在我的方法中,我仍然必須將我的.get()結果作爲int投入使用,否則它將返回Object。例如:(int) deliv.get(j) int Sort方法的for循環。有沒有辦法避免這種情況,或者我的代碼是否是正確的方法?

問題:假設數組可以更改大小,因此不只是使用基本數組。所有的數字都應該是成對的,尋找唯一缺少成對值的數字。我對數組進行排序,然後遍歷這些對以查找不匹配。謝謝。Java ArrayList get()爲整數而非對象

import java.util.*; 
class StolenDrone{ 
public static void main(String[] args){ 
    ArrayList<Integer> deliv_id = new ArrayList<>(); 
    deliv_id.add(99); 
    deliv_id.add(13); 
    deliv_id.add(4); 
    deliv_id.add(5); 
    deliv_id.add(8); 
    deliv_id.add(99); 
    deliv_id.add(8); 
    deliv_id.add(5); 
    deliv_id.add(4); 

    System.out.println("Array is: " + deliv_id); 
    sort(deliv_id); 
    System.out.println("Array is: " + deliv_id); 
    int unique = findUnique(deliv_id); 
    System.out.println("Unique ID is: " + unique); 
} 

//Sort ArrayList into increasing order 
static void sort(ArrayList deliv){ 
    int temp; 
    for(int i = 0; i<deliv.size();i++){ 
     for (int j=0; j<deliv.size()-1;j++){ 
      if((int) deliv.get(j)> (int) deliv.get(j+1)){ 
       temp = (int) deliv.get(j+1); 
       deliv.set(j+1, deliv.get(j)); 
       deliv.set(j, temp); 
      } 
     } 
    } 
} 

//check pairs in ArrayList to find unique entry 
static int findUnique(ArrayList deliv){ 
    for(int i = 0; i<deliv.size()-1;i+=2){ 
     if(deliv.get(i) == null){ 
      return -1; //no unique 
     } 
     if((int) deliv.get(i) != (int) deliv.get(i+1)){ 
      return (int) deliv.get(i); 
     } 
    } 
    return -1; 
} 

} 
+1

您參考(又名對象)類型,如整數與原始類型如int混合起來。使用'ArrayList '使'get()'返回Integer;和Integer和int不一樣,你需要「投射」。 – GhostCat

+2

應該是ArrayList deliv_id = new ArrayList ();那麼不需要投。使用Collections.sort(deliv_id)對數組進行排序 – Godwin

回答

2

static void sort(ArrayList deliv)

你的方法簽名請求的類型化的ArrayList。 編譯器無法知道ArrayList內部的內容,因此它需要您輸出結果。

它改成這樣:

static void sort(ArrayList<Integer> deliv)

現在,編譯器知道它是整數的ArrayList。 所以你不需要添加演員到get()

4

當你輸入參數ArrayList<Integer>編譯器知道該ArrayList裏面一切都是Integer類型,並且將只允許您添加Integers到列表中,從而get()回報Integer。如果沒有參數化編譯器將允許您將任何Object添加到ArrayList,因此調用get()將返回Object並要求轉換爲int

要刪除需要強制轉換的參數,您需要在函數聲明中將類型爲ArrayList的參數更改爲ArrayList<Integer>

2

在Java Integet是int的包裝類。你不能將int設置爲ArrayList的類型來工作,但你可以在那裏放置int類型,並且它會被自動轉換爲Integer。爲了meke工作也不錯,你應該這樣做:

static void sort(ArrayList deliv){ 
    int temp; 
    for(int i = 0; i<deliv.size();i++){ 
     for (int j=0; j<deliv.size()-1;j++){ 
      if(deliv.get(j)> deliv.get(j+1)){ // You should not cast, Integer is Comparable 
       temp = deliv.get(j+1).intValue();//Changes here 
       deliv.set(j+1, deliv.get(j).intValue());//And here 
       deliv.set(j, temp); 
      } 
     } 
    } 
} 

好運

+0

這是我在開始投射(int)之前的原始代碼,但返回比較兩個對象的錯誤。其他人指出,包括ArrayList參數的標籤帶入該方法使該代碼有效。謝謝。 – Rysz