2015-10-21 2 views
2

Я пытаюсь написать цикл для итерации через 2D-массив и суммирования каждого подматрица.Использование цикла for для итерации через 2D-массив

Пока мой код выглядит следующим образом:

int[][] data = { { 10, 20 }, { 20, 10 }, { 50, 60 }, { 45, 20 }, { 10, 35 }, { 25, 16 } }; 
int[] sumOfArrays = new int[5]; 

    for (int[] i : data) { 
     int sum = 0; 
     for (int x : i) { 
      sum =+ x; 
     } 
     sumOfArrays[i] = sum; 
    } 

    System.out.println(sumOfArrays); 

Это не представляется возможным из-за несоответствия типа: (я) INT [] - Int

Как я могу решить эту проблему?

ответ

2

Здесь есть несколько проблем. Начнем с того, что вам тяжело.

for (int[] i : data) { 
    int sum = 0; 
    for (int x : i) { 
     sum =+ x; 
    } 
    sumOfArrays[i] = sum; 
} 

Внутри контекста этих вложенных циклов, i относится к int[] ссылки, так что вы не можете использовать его для индекса во что-нибудь.

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

Для этого вам необходимо ввести новую переменную. Также обязательно переверните свое задание; вы хотите += вместо =+, так как первый - это просто присвоение гарантированному положительному значению.

int idx = 0; 
for (int[] i : data) { 
    int sum = 0; 
    for (int x : i) { 
     sum += x; 
    } 
    sumOfArrays[idx++] = sum; 
} 

Далее, ваш массив один элемент слишком короткий - у вас есть шесть строк, но вы только выделить место для 5. Фикса такого размера, а затем выше код будет работать нормально.

0
int[][] data = { { 10, 20 }, { 20, 10 }, { 50, 60 }, { 45, 20 }, { 10, 35 }, { 25, 16 } }; 
    int[] sumOfArrays = new int[data.length]; 

    for (int i = 0; i < data.length; i++) { 
     int sum = 0; 
     for (int x : data[i]) { 
      sum += x; 
     } 
     sumOfArrays[i] = sum; 
    } 

    System.out.println(Arrays.toString(sumOfArrays)); 
+0

Ах @Makoto объяснил это уже, нет необходимости для меня объяснить, что пошло не так, то :) – Bram

+0

Как это тот же самый код? – Bram

+0

Отредактировано, не видел, что вы сделали = +, пока он должен быть + = – Bram

1

Вы пытаетесь лечить i, как если бы это был показатель, но это ценность - int[] строки вы находитесь в данный момент.

Вы можете сохранить отдельную переменную index, которая будет увеличена в конце цикла i.

int index = 0; 
for (int[] i : data) { 
    int sum = 0; 
    for (int x : i) { 
     sum += x; // +=, not =+ 
    } 
    sumOfArrays[index] = sum; 
    index++; 
} 

Альтернативой было бы перейти на «стандарт» для цикла, поэтому у вас есть переменная индекс определяется как часть для цикла, получение int[] себя.

В любом случае, вам нужно будет использовать Arrays.toString to print the contents of sumOfArrays в конце вашего кода.

Кроме того, длина sumOfArrays не соответствует длине data, поэтому вы получите ArrayIndexOutOfBoundsException. Попробуйте

int[] sumOfArrays = data.length; 
Смежные вопросы