2013-05-03 3 views
1

아래 코드는 다른 사람들이 다르게 코딩하는지 궁금합니다. 어쩌면 작은 변화를 만들 수 있습니다. 미리 감사드립니다!Java - 행을 추가하는 것이 더 효율적인 방법입니까?

public class addRow { 

    public static int[][] insert(int [][] a, int [] row, int index){ 

     int [][] x = new int[a.length+1][a.length]; 
     int [] temp; 

     for(int i=0; i<x.length-1; i++) 
     { 
      x[i] = a[i]; 

      if(i == index) 
      { 
       temp = a[i]; 
       x[i] = row; 
       x[i+1] = temp;   
      }   
     } 
     return x; 
    } 

    public static void main(String[] args){ 
     int[][] a = {{1,2,3},{4,5,6},{10,11,12}}; 
     int[] row = {7,8,9}; 

     int [][] b = insert(a,row ,2); 


     for(int r=0; r < b.length; r++){ 
      for(int c=0;c< b[r].length; c++){ 
       System.out.print(b[r][c] + " "); 
      }System.out.println(); 
     } 
    } 
} 

답변

1

당신의 루프는 당신이 생각하는대로하지 않습니다. 행 ii+1x에 바꾼 경우 루프의 다음 반복은 이전 반복에서 x[i+1]에 넣은 요소를 덮어 씁니다. index을 클릭 한 후 ax 사이의 위치 차이를 추적하려면 추가 색인을 유지해야합니다 (또는 루프를 분할해야 함). 더 나은 방법은 System.arraycopy을 사용하는 것입니다.

또한 a (또는 row) 요소를 할당하기 때문에 이니셜 라이저에 x 행의 공간을 할당 할 이유가 없습니다. 당신의 방법의 나의 버전은 다음과 같습니다 코드가 1 경우에 작동하는 것 같군

public static int[][] insert(int [][] a, int [] row, int index){ 
    int[][] x = new int[a.length + 1][]; // no second dimension 
    System.arraycopy(a, 0, x, 0, index); 
    x[index] = row; 
    System.arraycopy(a, index, x, index + 1, a.length - index); 
    return x; 
} 
+0

아아 나는 물어 봤기 때문에 기쁘다. 매우 다른 생각을하고 싶었다. 나는 당신의 제안으로 그것을 추적 할 것이다. –

0

해서, 그것이 적절한 의미하지 않는다. 당신은 다른 경우들도 시도했을 것입니다.

제대로 작동하려면 방법을 다음과 같이 변경해야합니다.

public static int[][] insert(int [][] a, int [] row, int index){ 

    int [][] x = new int[a.length+1][a.length]; 
    int j = 0; // New counter for array `a` 
    // Also `temp` array removed. Not required at all. 
    for (int i = 0; i < x.length; i++) { 
     x[i] = a[j]; 
     if (i == index) { 
      x[i] = row; 
      x[i + 1] = a[j]; 
     } else { 
      j++; 
     } 
    } 
    return x; 
} 

이것은 코드베이스를 변경하지 않고 코드를 최적화 할 수있는 최대 값입니다.

이제 최적화에 관해서는 큰 시간이이고, 다른 제안 사항에 따르면 System#arrayCopy을 사용할 수 있습니다.

+0

나는 그것을 이해한다. 빠른 답장을 보내 주셔서 감사합니다! –

관련 문제