【发布时间】:2015-12-12 12:55:39
【问题描述】:
我正在尝试遍历 ArrayList 的 ArrayList - 但不知何故,我的一切都失败了,我不明白错误消息。
错误是:
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.util.ArrayList
我尝试使用常规的 for(int i; i
public static boolean listsContains(ArrayList<ArrayList<Integer>> lists, int v) {
boolean b = false;
for (ArrayList<Integer> list : lists) {
if (list.contains(v)) {
b = true;
} else {
b = false;
}
}
return b;
}
导致错误的实际行是“for (ArrayList list”...
已编辑:为了清楚起见,我在代码中编辑了更多声明性泛型(不幸的是,它的工作原理与我发布的第一个代码一样少)。
Edit2:好的,所以不是方法本身导致了问题,所以根据要求,这里是填充这些列表的其余代码。代码尚未完成,但我在完成时遇到了这个问题。
public static void main(String[] args) {
Graph g = DataSource.load();
ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();
for(int i = 0; i < g.numberOfVertices(); i++) {
if(!(listsContains(lists, i))) { // add list if node is unlisted (since after first iteration one entire network is found)
listsCreate(lists, i);
}
Iterator it = g.adj(i).iterator(); // create iterator for current node's edges
if (!(it.hasNext())) { // node has no edges
listsCreate(lists, i);
} else { // node has edges, iterate through them
while(it.hasNext()) {
Edge current = (Edge) it.next();
if(!(listsContains(lists, current.to))) { // unlisted node
int index = listsIndexOf(lists, current.from);
findNetwork(g, lists.get(index), current.to);
} else {
continue; // node already listed
}
}
}
}
System.out.println("Number of connected graphs: " + lists.size());
} // Main
【问题讨论】:
-
向我们展示你的方法调用。
-
另外,重新考虑你的逻辑:它创建了一个无用的迭代器。它循环遍历所有数组列表,但只保留最后一个的结果。并使用泛型:它应该是一个 ArrayList
>。或者更好的是 List - >.
-
发布所有相关代码,以及异常的完整堆栈跟踪。问题不在发布的代码中(尽管它还有其他几个问题)。您的外部列表不包含 ArrayList 实例。
-
你是对的,它来自错误解决,我现在已经尝试了很多东西。玩了一个小时:(
-
发布所有相关代码,以及异常的完整堆栈跟踪。问题不在发布的代码中。它在生成列表列表的代码中,实际上生成了一个包含整数的列表。