2011-07-27 3 views
0

Je suis en train d'exécuter un programme que je l'ai fait en Java, mais je ne sais pas ce qui se passe que me donne l'erreur suivante:Java ArrayLists

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

Voici le code:

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; 
    } 

Il semble que l'erreur se trouve dans l'instruction if. Quelqu'un peut-il m'aider avec ça?

+1

Si vous regardez la trace de pile de votre exception, elle devrait vous montrer dans quelle ligne l'erreur est. Cela aide à trouver l'erreur. –

+2

L'utilisation de [generic] (http://www.oracle.com/technetwork/articles/javase/generics-136597.html) vous aidera à éviter ces erreurs. –

+1

Je vois une parenthèse: O – Jacob

Répondre

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

devrait lire

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

Vous jettes connections.get (row2) au lieu de connexions de coulée d'abord et ensuite faire un obtenir sur le arraylist.

EDIT - Vous devriez définitivement refactoriser le code pour utiliser les fonctionnalités génériques de Java 1.5. Si ce n'est pas une option, vous devriez refactoriser le code pour qu'il soit plus lisible - par exemple: votre méthode est appelée "connections" et ensuite votre variable s'appelle "connections"

2

Vous devez également utiliser des génériques au lieu de la diffusion. De cette façon, vous obtiendrez une erreur lors de la compilation si vous faites cela et votre code sera de type sécurisé. Les génériques spécifient simplement le type que vous utilisez pour le compilateur afin qu'il puisse vérifier les types lors de la compilation.

Exemple:

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); 

En savoir plus sur generics here.

Hope this helps.