Улучшенный цикл For Loop не добавляет элементы в массив

Я пытаюсь добавить элементы в массив с помощью расширенного для цикла. Если я сделаю это с помощью обычного цикла for, это сработает. Но когда я используя расширенный цикл for, он выдает исключение IndexOutOfBounds и я не уверен, почему это происходит?

int[ ] array = {1,2,3};
int total = 0; 
for(int counter : array) {
    total = total + array[counter];
}
System.out.println(total);
total = total + counter; вы должны использовать array[i] только при использовании стиля цикла for (i = 0; i <array.length; i ++)
Ian Mc 27.03.2018 04:18

это сработало, спасибо!

Neo 27.03.2018 04:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
176
2

Ответы 2

counter - это не индекс, это элемент. Вам нужно добавить counter в total.

Если вы используете Java 8, вы можете упростить его до:

int[ ] array = {1,2,3};
System.out.println(Arrays.stream(array).sum());

Если вы все же хотите сделать это без потоков:

int[ ] array = {1,2,3};
int total = 0; 
for(int counter : array) {
    total = total + counter;
}
System.out.println(total);

Как ранее сказал Аникет, счетчик - это не показатель.

Ваш код - это более короткая версия этого кода:

 for (int i = 0; i<array.size; i++){
     counter = array[i];
     total = total + counter;
 }

Как видите, counter становится элементом array [i], а i - индексом массива.

Если вы хотите отслеживать индекс, используя вашу версию кода, вам придется создать внешнюю переменную с именем i = 0 и увеличивать ее на единицу при каждом повторении.

 int i = 0
 for (counter : array){
     i++;
     counter = array[i];
     total = total + counter;
 }

Другие вопросы по теме