用未知参数替换数组的值

时间:2017-01-22 04:21:29

标签: java

我需要将2D数组中的所有值设置为零,除了三个值。 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 个答案:

答案 0 :(得分:1)

如果您知道设置每个值所需的位置,则不需要使用for循环遍历2d数组。只需检查2d数组是否足够大,如果是这样,请将该值设置为您想要的任何值。此外,由于您将数组传递给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;
            }
        }
    }   
}