2016-11-07 4 views
2

私の試験の質問の1つは、2D配列の外側のint要素の合計を計算するコードを書くことを求められました。行の長さと列の長さが必ずしも等しいわけではありません。Javaの整数の2次元配列の外側の要素を集計しますか?

[編集]コーナー値を複数回追加することはできません。

私はこのコードを思いつきましたが、うまくいきましたが、同じ結果を達成するための効率的な方法があるかどうかを知りたいと思います。ありがとう。

for(int i = 0; i < in.length; i ++) { for(int j = 0; j < in[i].length; j++) { if(i == 0 || i == in.length - 1) { sum += in[i][j]; } else { sum += in[i][in[i].length - 1 ] + in[i][0]; break; } } }

+1

何であっても(n + m)、n =行数、m =列数です。 –

答えて

1

私はあなたの質問を理解していれば、あなたは最初

public static int sumArray(int[] in) { 
    int sum = 0; 
    for (int val : in) { 
     sum += val; 
    } 
    return sum; 
} 

のような1つの配列の要素を追加する方法を抽出できそして、あなたのような最初と最後の行の要素を追加することができます次いで

int sum = sumArray(in[0]) + sumArray(in[in.length - 1]); 

そして

のような付加的な(非ネストされた)ループを有する他の行から外側の要素
for (int i = 1; i < in.length - 1; i++) { 
    sum += in[i][0] + in[i][in[i].length - 1]; 
} 

または、ジャワ8+に、あなたは余分な方法と明示的なループを排除する可能性があり、

int sum = IntStream.of(in[0]).sum() // 
     + IntStream.of(in[in.length - 1]).sum() // 
     + IntStream.range(1, in.length - 1).map(i -> { 
      return in[i][0] + in[i][in[i].length - 1]; 
     }).sum(); 
+0

質問は配列の外側の要素の合計を取得することです。 1次元配列のみを使用しました。 – denis

+0

最初の行、最後の行、最初と最後の値を間にあるすべての行から追加します(2d配列はすべて1d配列で構成されます。*文字通り*配列の配列です)。 –

1

のような1文でそれを行うはい、あなたは、より効率的にそれを行うことができます。

int row = in.length; 
int column = in[0].length;//not sure of this syntax but trying to get the column size 
int sum = 0; 

for(int j=0;j<column;j++) 
{ 
    sum+=in[0][j]+in[row-1][j]; 
} 
for(int j=1;j<row-1;j++) 
{ 
    sum+=in[j][0]+in[j][column-1]; 
} 

解決策はO(mn)であり、ループは不要なインデックスを反復処理します。

+1

あなたは数え切れません。コーナーは2度カウントされています。 –

+0

コメントありがとうございます。変更を加えました。 – denis

関連する問題