Java数组列表

Java数组列表,java,classcastexception,Java,Classcastexception,我试图运行一个用Java编写的程序,但我不知道它会发生什么 正在给我以下错误: 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 = n

我试图运行一个用Java编写的程序,但我不知道它会发生什么 正在给我以下错误:

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;
     }
公共静态ArrayList连接(ArrayList list3){
ArrayList connections=新建ArrayList();
int row1=1;
int row2=0;
int col=0;
添加(新的ArrayList());
((ArrayList)connections.get(0)).add(0);
((ArrayList)connections.get(0)).add(1);
System.out.print(((ArrayList)connections.get(0)).get(0));
而(行1
似乎错误在if语句中。有人能帮我吗

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))){
您正在转换连接。get(第2行)而不是先转换连接,然后在arraylist上执行get

编辑——您肯定应该重构代码,以使用Java1.5功能,即泛型。如果这不是一个选项,您应该重构代码以使其更具可读性——例如:您的方法称为“connections”,然后您的变量称为“connections”

应该读

if(((ArrayList)list3.get(row1)).get(col).equals(( ((ArrayList)connections).get(row2)).get(col))){
您正在转换连接。get(第2行)而不是先转换连接,然后在arraylist上执行get


编辑——您肯定应该重构代码,以使用Java1.5功能,即泛型。如果这不是一个选项,您应该重构代码以提高可读性——例如:您的方法称为“connections”,然后您的变量称为“connections”

您还应该使用泛型而不是强制转换。这样,如果您这样做,您将在编译时得到一个错误,并且您的代码将是类型安全的。泛型只指定编译器使用的类型,这样它就可以在编译时检查类型

例如:

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


希望这能有所帮助。

您也应该使用泛型而不是强制转换。这样,如果您这样做,您将在编译时得到一个错误,并且您的代码将是类型安全的。泛型只指定编译器使用的类型,这样它就可以在编译时检查类型

例如:

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


希望这有帮助。

如果查看异常的堆栈跟踪,它应该会显示错误所在的行。这有助于发现错误。使用将帮助您避免这些错误。如果查看异常的堆栈跟踪,它将显示错误所在的行。这有助于发现错误。使用将帮助您避免这些错误。