我正在尝试运行我用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;
}
似乎错误发生在if语句中。有人可以帮我吗?
答案 0 :(得分: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(row2),而不是先建立连接,然后对arraylist进行get。
编辑 - 你绝对应该重构代码以使用Java 1.5功能,即泛型。如果这不是一个选项,您应该重构代码以使其更具可读性 - 例如:您的方法称为“连接”,然后您的变量称为“连接”
答案 1 :(得分: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);
的更多信息
希望这有帮助。