Как я могу инициализировать массив с расширенным циклом for?

1

Я оптимизировал приложение и хотел изменить мои циклы на усиленные циклы:

Из:

for (int m = 1;m < MAX_BEREN;m++)
{           
    Wasberen[m] = new Wasbeer();       
    Wasberen[m].YYY = r.nextInt(SchermY - 28);
}

чтобы:

for (Wasbeer a : Wasberen)
{
    if (a!=null)
    {
       a = new Wasbeer();
       a.YYY = r.nextInt(SchermY - 28);
    }
}

Я получаю исключение NullPointerException, потому что он, вероятно, не знает, сколько "beren" может быть в массиве, но я не уверен, как управлять тем же, что и цикл выше (MAX_BEREN = 11).

Теги:
arrays
for-loop
foreach

3 ответа

1
Лучший ответ

Если ссылка массива (' Wasberen ' в этом случае) в выражении расширенного для оператора равна null, тогда при выполнении инструкции возникает NullPointerException.

  • 0
    Итак, я инициализирую с помощью for и повторяю на более поздних этапах с расширенным циклом? Потому что «wasberen» уже существует после init
  • 0
    NullPointerException может быть выдано, учитывая ваш фрагмент, из конструктора Wasbeer без аргументов или если 'r' также является нулевой ссылкой. Трассировка стека для исключения должна идентифицировать виновника.
1

Для инициализации массивов вы должны придерживаться синтаксиса, который у вас был раньше.

  • 0
    a [i] = новый объект (); не равен Object b = a [i]; b = новый объект ();
0

Вы не можете использовать расширенный for-loop в Java для заполнения массива. (Я предполагаю, что ваш массив Wasberen уже создан раньше - если нет, это даст вам исключение NullPointerException в обоих вариантах.)

Ваш код (упрощенный)

for (Wasbeer a : Wasberen)
{
    a = ...;
}

эквивалентно

for (int i = 0; i < Wasberen.length; i++)
{
    Wasbeer a = Wasberen[i];
    a = ...;
}

Это присваивание изменит локальную переменную a, но не повлияет на содержимое массива.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню