Java数组列表
我试图运行一个用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
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
希望这有帮助。如果查看异常的堆栈跟踪,它应该会显示错误所在的行。这有助于发现错误。使用将帮助您避免这些错误。如果查看异常的堆栈跟踪,它将显示错误所在的行。这有助于发现错误。使用将帮助您避免这些错误。