Мне нужна помощь с методом, использующим цикл for - PullRequest
0 голосов
/ 08 февраля 2011
  public void collect( int ordNum )
  {
       Basket b = new Basket(ordNum);
       for (Basket b : conveyerBelt) { // line 4
           readyCollected.add(b);
       }
  }

То, что я пытаюсь сделать с помощью этого метода, - поиск в ArrayList для orderNum. Когда я нахожу его, я хочу добавить порядковый номер, который я ввел, в readyCollected. Проблема: я получаю сообщение об ошибке в строке 4.

Интересно, можете ли вы, ребята, помочь мне реализовать этот метод?

Кстати, конвейерная лента уже содержит корзину с номером заказа. Допустим, что конвейерный пояс содержит корзину с номером заказа 3, а я ввожу 3, я хочу добавить корзину в Arraylist readyCollected, содержащее номер заказа 3.

Ответы [ 6 ]

1 голос
/ 08 февраля 2011

Полагаю, ваша ошибка в том, что шлейф-конвейер не является итеративным. Чтобы использовать конструкцию foreach, вы должны убедиться, что объект, который вы перебираете, реализует Iterable.

http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.14.2

Выдержка:

Выражение должно иметь тип Iterable, иначе оно должно иметь тип массива (§10.1), иначе произойдет ошибка времени компиляции.

Область действия локальной переменной, объявленной в части FormalParameter расширенного оператора for (§14.14), содержится в операторе

Значение расширенного оператора for дается переводом в базовый оператор for.

Если тип выражения является подтипом Iterable, то пусть I будет типом выражения Expression.iterator(). Расширенный оператор for эквивалентен основному для оператора формы:

for (I #i = Expression.iterator(); #i.hasNext(); ) {

        VariableModifiersopt Type Identifier = #i.next();
   Statement
}
0 голосов
/ 08 февраля 2011

Я думаю, что-то вроде

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.

0 голосов
/ 08 февраля 2011

Вы используете одно и то же имя ( b ) для двух переменных. Это, вероятно, причина ошибки, которую вы получаете, но я не уверен, что вы пытаетесь достичь с помощью этого кода.

0 голосов
/ 08 февраля 2011

Это ошибка компиляции? Может быть, что-то про символ и conveyerBelt? Потому что это не определено в фрагменте, который вы нам дали.

0 голосов
/ 08 февраля 2011

conveyerBelt должен быть объявлен как Collection<Basket > Под Collection я имел в виду любое Collection

0 голосов
/ 08 февраля 2011

Вы не предоставляете достаточно информации для правильного решения.

  • В чем ошибка?
  • Какие бывают типы конвейерной ленты и готовые?

Также, что вы подразумеваете под "номером заказа" - N-ым элементом в списке или это какое-то поле?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...