Java для каждого цикла повторяю логический массив - PullRequest
1 голос
/ 23 января 2012

У меня есть логический массив

boolean[] test = {
    false,
    true,
    true,
    false,
    true
};

и я пытаюсь перевернуть (истина в ложь и ложь в истину) значения с помощью выражения «для каждого», например:

for(boolean x : test) {
    x = !x;
}

Но это только изменение переменной x в локальной области видимости.

Я новичок в Java и хочу спросить, как это можно сделать и является ли это правильным подходом. Я много искал, но большинство примеров используются для сбора данных из массива без его изменения.

Ответы [ 6 ]

9 голосов
/ 23 января 2012

Нет, это не правильный подход.Усовершенствованный цикл for не позволяет вам изменять значения того, что вы перебираете.Чтобы инвертировать массив, вы должны использовать обычный цикл for:

for (int i = 0; i < test.length; i++) {
    test[i] = !test[i];
}

(Обратите внимание, что расширенный цикл for позволит вам вносить изменения в объекты , которые являются любыми элементами массиваупоминается, если они были классами - но это не то же самое, что изменение значения самого элемента.)

2 голосов
/ 23 января 2012

Вам нужно будет использовать не расширенный цикл for, если вы хотите повлиять на значения теста:

for (int i = 0; i < test.length; ++i) {
  test[i] = !test[i];
}
1 голос
/ 23 января 2012

Не удивительно, что это не работает. В конце концов, вы манипулируете локальной переменной, и это не объект и не ссылка. Используйте нормаль для цикла и измените соответствующую позицию.

1 голос
/ 23 января 2012

Вы не делаете это с a для каждого, так как для каждого читает значение массива и сохраняет его в локальной переменной, как вы сказали. Вам нужно перебрать массив и получить доступ к индексу напрямую. Я не буду публиковать какой-либо код, чтобы вы могли найти и подумать об этом.

1 голос
/ 23 января 2012

Вы не можете изменить элемент в цикле for-each.Можете ли вы использовать вместо этого обычный цикл?

for (int i=0; i < test.length; i++)
{
    test[i] = !test[i];
}
0 голосов
/ 23 января 2012

Улучшенный цикл for создает новую переменную x и устанавливает значение локально каждый раз, потому что логическое значение является примитивом и поэтому не передается по ссылке.Для этого вам нужно будет использовать старый цикл for.

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