public void collect( int ordNum )
{
Basket b = new Basket(ordNum);
for (Basket b : conveyerBelt) { // line 4
readyCollected.add(b);
}
}
我正在尝试使用此方法在ArrayList中搜索orderNum。当我找到它时,我想将我输入的orderNum添加到readyCollected中。问题:我在第4行收到错误消息。
想知道你们能不能帮我实现这个方法。
顺便说一句,传送带已经包含带有订单号的篮子。因此,假设conveyerBelt包含订单号为3的Basket,我输入3,我希望它将Basket添加到包含订单号3的Arraylist readyCollected。答案 0 :(得分:1)
我猜你的错误是传送带不是可以接受的。要使用foreach构造,必须确保您正在迭代的对象实现Iterable。
http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.14.2
摘录:
Expression必须具有Iterable类型,否则它必须是数组类型(第10.1节),否则会发生编译时错误。
在增强型for语句(第14.14节)的FormalParameter部分中声明的局部变量的范围是包含的语句
增强的for语句的含义是通过翻译成一个基本的for语句来给出的。
如果Expression的类型是Iterable
的子类型,那么让我成为表达式Expression.iterator()
的类型。增强的for语句相当于表单的基本语句:
for (I #i = Expression.iterator(); #i.hasNext(); ) {
VariableModifiersopt Type Identifier = #i.next();
Statement
}
答案 1 :(得分:0)
您没有提供足够的信息来妥善解决这个问题。
你的意思是“订单号” - 列表中的第N个项目还是某个字段?
答案 2 :(得分:0)
conveyerBelt
应声明为Collection<Basket >
Collection
我的意思是Collection
答案 3 :(得分:0)
是编译错误吗?也许有关于符号和conveyerBelt
的内容?因为它没有在你给我们的片段中定义。
答案 4 :(得分:0)
您对两个变量使用相同的名称( b )。这可能是你得到的错误的原因,但我不确定你想用这个代码实现什么。
答案 5 :(得分:0)
我认为这就像
public void collect( int ordNum )
{
for (Basket b : conveyerBelt) {
if (b.getOrdNum() == ordNum) {
readyCollected.add(b);
return; // if only one occurrence wanted
}
}
}
假设conveyerBelt
是Basket
的一些集合而readyCollected
是Basket
的一些列表。