Как я могу инициализировать массив с расширенным циклом for? - PullRequest
1 голос
/ 01 сентября 2011

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

От:

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).

Ответы [ 3 ]

1 голос
/ 01 сентября 2011

Если ссылка на массив (в данном случае 'Wasberen') в расширенном операторе for равна нулю, то при выполнении инструкции будет получено NullPointerException.

1 голос
/ 02 сентября 2011

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

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

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

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

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

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

1 голос
/ 01 сентября 2011

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

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