我有一个名为&#34; Pencilcase&#34;的类,其中唯一的实例变量是ArrayList<Pencil>
。
我有一个像这样的方法:
public int qwerty(Pencilcase p)
我尝试过这样的事情:for (Pencil pen : p)
但是我收到一个错误,其中表示&#34; for-each不适用于表达式类型。必需:array或java.lang.Iterable;找到了Pencilcase&#34;。
因为它说&#34;必需:java.lang.iterable&#34;,我试图使用迭代器,但仍然无法解决问题。我究竟做错了什么?谢谢
答案 0 :(得分:0)
要使用for-each Java,您需要使用java.lang.Iterable
作为错误消息。这意味着您要迭代的类需要实现此接口。你有两种方法可以解决这个问题。
第一个解决方案:直接访问内部列表。
public class Pencilcase {
public ArrayList<Pencil> list;
}
然后像这样迭代:
public int qwerty(Pencilcase p) {
for (Pencil pen : p.list) {
....
}
}
现在这个解决方案使用了一个公共类变量。这是一件坏事。它看起来也不是很花哨。所以我们有一个
第二个解决方案:实施Iterable
现在您需要更改Pencilcase
课程以实施Iterable
public class Pencilcase implements java.lang.Iterable<Pencil> {
private ArrayList<Pencil> list;
@Override
public Iterator<Pencil> iterator() {
return list.iterator();
}
}
使用此类,您可以直接迭代Pencilcase实例。
这是有效的,因为for
- 循环基本上使用iterator
函数获取迭代器,并使用它来获取列表中的所有条目。
因此,你的循环可能如下所示:
public int qwerty(Pencilcase p) {
for (Pencil pen : p) {
....
}
}