2017-01-22 1 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; 
     } 
     } 
    } 
    } 

내가 대한 ArrayIndexOutOfBounds납니다을 -3 때문에 시험 때문에 하나 배열에 값이 -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; 
      } 
     } 
    } 
} 
관련 문제