2017-01-22 14 views
0

3つの値を除いて、2D配列のすべての値を0に設定する必要があります。 42が左上隅にあり、3行3列が-2であり、4行6列が-3である。配列のサイズは、例えば、不明である:配列の値を未知のパラメータに置き換える

[0,0,0,0,0,0,0] 
[0,0,0,0,0,0,0] 
[0,0,0,0,0,0,0] 
[0,0,0,0,0,0,0] 
[0,0,0,0,0,0,0] 

[42,0,0,0,0,0,0] 
[0,0,0,0,0,0,0] 
[0,0,-2,0,0,0,0] 
[0,0,0,0,0,-3,0] 
[0,0,0,0,0,0,0] 

これは私がこれまで持っているものです。

public static void setThreeNumbers(int[][] arr) 
    { 
    int[][] arr1 = arr; 
    for (int r = 0; r < arr.length; r++) 
    { 
     for (int c = 0; c < arr[0].length; c++) 
     { 
     if (arr[r][c] == arr[0][0]) 
     { 
      arr1[r][c] = 42; 
     } 
     if (arr[r][c] == arr[2][2]) 
     { 
      arr1[2][2] = -2; 
     } 
     if (arr[r][c] == arr[3][5]) 
     { 
      arr1[3][5] = -3; 
     } 
     } 
    } 
    } 

ので、私はので、試験の一つ上のための-3にArrayIndexOutOfBoundsを取得しています値が-3に変更されるために配列に十分な行がなく、このif文がこの値に対して機能していません。

答えて

1

各値を設定する位置が分かっている場合は、forループを使用して2次元配列を反復処理する必要はありません。 2次元配列がその位置に十分に大きいかどうかをチェックし、そうであれば、その値をあなたが望むものに設定します。また、配列をsetThreeNumbersメソッドに渡すので、配列が参照渡しされるため、そのメソッド内に別の配列を作成する必要はありません。 下記の方法を現在のものと交換してください。

public static void setThreeNumbers(int[][] arr) { 
    if (arr.length > 0 && arr[0].length > 0) { 
     arr[0][0] = 42; 
     if(arr.length > 2 && arr[0].length > 2) { 
      arr[2][2] = -2; 
      if(arr.length > 3 && arr[0].length > 5) { 
       arr[3][5] = -3; 
      } 
     } 
    } 
} 
関連する問題