【发布时间】:2011-07-13 22:25:41
【问题描述】:
private static ArrayList<String> places(ArrayList<Road> roads) {
ArrayList<String> places = new ArrayList<String>(10); // tried setting minimum capacity
places.ensureCapacity(10); // tried setting minimum capacity
for (int i = 0; i < roads.size(); i++) {
String from = roads.get(i).getFrom();
String to = roads.get(i).getTo();
for (int j = 0; j < places.size(); j++) { // this is where things go wrong, it doesn't iterate because the "j < places.size()" condition isn't met
if ((places.get(i).equals(from))==false) {
places.add(from);
}
if ((places.get(i).equals(to))==false) {
places.add(to);
}
}
}
return places;
}
不知道为什么,但是 places-ArrayList 没有设置初始容量,这导致我以后必须迭代时无法迭代位置(处理 j 变量的 for 循环)。
【问题讨论】:
-
你遇到了什么错误 - 你怎么不能迭代?我怀疑你的实际问题是
places.get(i)正在返回一个null值,你将无法在...上调用equals()哦,大多数时候使用'not'运算符 - @987654325 @ - 用于代替==false -
是的,
places.get(i)可能会返回null,看看我能不能解决这个问题。我使用了非运算符,但改为==false,我可能会改回来,这可能是一个好习惯,但如果我使用==false,我发现更容易将我的大脑包裹在设计上。 -
是的,除了
==false的评估结果为 true,这只是令人困惑。另外,请考虑切换到Set实现,因为这似乎是您试图产生的 - 或者查找contains()方法,它将处理您的 null 问题。 -
我刚刚在那些 for 循环之前添加了一个
if,说明如果 ArrayList 为空,则应该添加一些内容。
标签: java string for-loop arraylist