2011-07-27 57 views
0

我試圖運行我已經在Java中做了一個程序,但我不知道發生了什麼,它 是給我下面的錯誤:的Java的ArrayList

Exception in thread "main" java.lang.ClassCastException: 
java.lang.String cannot be cast to java.util.ArrayList 

下面是代碼:

public static ArrayList connections(ArrayList list3) { 

     ArrayList connections = new ArrayList(); 
     int row1 = 1; 
     int row2 = 0; 
     int col = 0; 

     connections.add(new ArrayList()); 
     ((ArrayList)connections.get(0)).add(0); 
     ((ArrayList)connections.get(0)).add(1); 

     System.out.print(((ArrayList)connections.get(0)).get(0)); 

     while(row1 < list3.size()) { 


      if(((ArrayList)list3.get(row1)).get(col).equals(((ArrayList)connections.get(row2)).get(col))){ 
       connections.add(((ArrayList)list3.get(row1)).get(1)); 
       row1++; 
      } 

      else { 
       connections.add(new ArrayList()); 
       connections.add(((ArrayList)list3.get(row1)).get(0)); 
       row2 = row1; 
       row1++; 
      } 
     } 

     return connections; 
    } 

看來,錯誤是在if語句。有人可以幫助我嗎?

+1

如果您查看異常的堆棧跟蹤,它應該顯示錯誤在哪一行。這有助於發現錯誤。 –

+2

使用[泛型](http://www.oracle.com/technetwork/articles/javase/generics-136597.html)將幫助您避免這些錯誤。 –

+1

我看到括號:O – Jacob

回答

3
if(((ArrayList)list3.get(row1)).get(col).equals(((ArrayList)connections.get(row2)).get(col))){ 

應該讀

if(((ArrayList)list3.get(row1)).get(col).equals((((ArrayList)connections).get(row2)).get(col))){ 

你是第一個鑄造connections.get(2行),而不是鑄造的連接,然後做在一個ArrayList中獲得。

編輯 - 您絕對應該重構代碼以使用Java 1.5功能,即泛型。如果這不是一個選項,您應該重構代碼以使其更易讀 - 例如:您的方法稱爲「connections」,然後將您的變量稱爲「connections」

2

您還應該使用泛型而不是cast。這樣,如果你這樣做,並且你的代碼將是類型安全的,你將在編譯時得到一個錯誤。泛型只是指定您正在使用的編譯器類型,以便在編譯時檢查類型。

例子:

ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>(); 
list.add(new ArrayList<Integer>()); 

list.get(0).add(0); 
list.get(0).add(1); 
list.get(0).add(2); 

更多generics here.

希望這有助於。