我需要一个使用for循环的方法的帮助

时间:2011-02-08 18:20:30

标签: java for-loop

  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。

6 个答案:

答案 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)

您没有提供足够的信息来妥善解决这个问题。

  • 错误是什么?
  • 什么类型的传送带和readyCollected?

你的意思是“订单号” - 列表中的第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
        }
    }
}

假设conveyerBeltBasket的一些集合而readyCollectedBasket的一些列表。