2017-01-19 3 views
-1

Просто пытаясь понять, что не так с моим кодом. Ценю ур помочь :)Оператор + не определен для типа аргументов int, int []

public class lab5 { 
public static void main(String[] args) { 
    int[][] m = new int[5][5]; 

    for (int i = 0; i < m.length; i++) { 
     for (int j = 0; j < m[i].length; j++) { 
      m[i][j] = i + j; 
      System.out.println(m[i][j] + " "); 
     } 
     System.out.println(); 
    } 
    int sum = 0; 
    for (int i = 0; i < m.length; i++) 
     sum = sum + m[i]; **// here i get error "The operator + is undefined for the argument type(s) int, int[]"** 
    double average = sum/m.length; 

    System.out.println("Average value of array element is " + average); 

} 

}

+0

В сообщении об ошибке говорится, что все. Вы пытаетесь добавить значение 'int' и * array *, что, конечно, связано с тем, что значение' m [i] 'является подматрицей. – Andreas

ответ

1

m является 2-мерный массив.

m[i] является одномерным массивом.

+ Оператор не имеет смысла, если аргументы являются числом (sum) и 1-мерным массивом (m[i]).


Update: вычислить среднее значение 2-мерного массива, вам необходимо иметь два (вложенный) петлю. Как и в первой части вашей программы.

int sum = 0; 
int count = 0; 
for (int i = 0; i < m.length; i++) { 
    for (int j = 0; j < m[i].length; j++) { 
     sum = sum + m[i][j]; 
     ++count; 
    } 
} 
double average = ((double) sum)/count; 

Код выше счета для jagged arrays, но делает не ручку integer overflows.


Вот исправленный домашнее задание для вас :) Попробуйте упростить код, указанный выше, удаляя переменную count (вы можете это сделать, если 2-мерный массив представляет собой матрицу, а не зазубренный массив).

Попытайтесь также обработать возможное полное переполнение (подсказка: измените тип sum на нечто большее, чем int).

+0

как его решить? Я только что начал java, и я действительно не знаю, как это нормально работать. –

+0

не могли бы вы объяснить, каков предполагаемый результат? Вы хотите вычислить среднее значение по всем элементам матрицы 'm'? Или вы хотите, чтобы среднее значение определенной строки? Или вы хотите, чтобы среднее значение каждой строки было отдельно? –

+0

, вообще говоря, вы должны предоставить 2 индекса, чтобы получить целочисленное значение из 2-мерного массива. Например. 'm [i] [0]' даст вам число (а не массив), которое вы можете добавить в 'sum'. Но намерение программы не ясна ... –

1

Если вы хотите вычислить сумму массива, вам нужно 2 для циклов. Попробуйте следующее:

for (int i = 0; i < m.length; i++) { 
    for (int j = 0; j < m[i].length; j++) { 
    sum = sum + m[i][j]; 
    } 
} 
Смежные вопросы