2011-07-27 5 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

[generics](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))){ 

あなたはconnections.get(ROW2)をキャストする代わりに、最初の接続をキャストして、ArrayListの上で取得を行っている

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

をお読みください。

EDIT - ジェネリックのJava 1.5機能を使用するには、間違いなくコードをリファクタリングする必要があります。これはオプションでない場合、コードを読みやすくするためにコードをリファクタリングする必要があります。たとえば、メソッドが「接続」と呼ばれ、変数が「接続」と呼ばれます。

2

キャストではなくジェネリックを使用する必要があります。そうすればコンパイル時にエラーが発生し、コードは型保証されます。ジェネリックスは、コンパイル時に型をチェックできるように、コンパイラに使用している型を指定するだけです。

例:このことができます

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.についての希望。