我需要将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语句不适用于此值。
答案 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;
}
}
}
}