Я оптимизировал приложение и хотел изменить мои циклы на усиленные циклы:
Из:
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).
Если ссылка массива (' Wasberen
' в этом случае) в выражении расширенного для оператора равна null, тогда при выполнении инструкции возникает NullPointerException
.
Для инициализации массивов вы должны придерживаться синтаксиса, который у вас был раньше.
Вы не можете использовать расширенный for-loop в Java для заполнения массива. (Я предполагаю, что ваш массив Wasberen
уже создан раньше - если нет, это даст вам исключение NullPointerException в обоих вариантах.)
Ваш код (упрощенный)
for (Wasbeer a : Wasberen)
{
a = ...;
}
эквивалентно
for (int i = 0; i < Wasberen.length; i++)
{
Wasbeer a = Wasberen[i];
a = ...;
}
Это присваивание изменит локальную переменную a
, но не повлияет на содержимое массива.