2017-01-19 22 views
-1

私のコードに何が問題なのかを理解しようとしています。多くはウル助けに感謝:)引数の型int、int []に対してoperator +が未定義です

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 '値と*配列*を追加しようとしています。これは' m [i] 'の値がサブ配列であるためです。 – Andreas

答えて

1

m 2次元アレイです。

は、1次元配列である。

+引数が数値(sum)と1次元配列(m[i])である場合、演算子は意味を持ちません。


アップデート: 2次元配列の平均値を計算するために、次の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を行います。ここで


はあなたのための改正宿題です:) は(2次元配列は行列ではなく、ジャグ配列であれば、あなたがこれを行うことができます)count変数を削除し、上記のコードを簡素化するようにしてください。

可能な整数オーバーフローも正しく処理してください(ヒント:sumのタイプをintより大きい値に変更してください)。

+0

どうすれば解決できますか?私はちょうどjavaを開始し、私は本当にそれが正常に動作する方法を知っていない –

+0

あなたは意図した結果は何かを説明してくださいできますか? 'm'マトリックスのすべてのアイテムを平均して計算しますか? または、特定の行の平均が欲しいですか?または、すべての行の平均を個別にしたいですか? –

+0

一般に、2次元配列から整数値を取得するには、2つのインデックスを指定する必要があります。例えば。 'm [i] [0]'は 'sum'に加えることができる(配列ではなく)数値を与えます。しかし、プログラムの意図は明確ではありません... –

1

配列の合計を計算する場合は、2 forループが必要です。 試してみてください:

for (int i = 0; i < m.length; i++) { 
    for (int j = 0; j < m[i].length; j++) { 
    sum = sum + m[i][j]; 
    } 
} 
関連する問題