2012-10-09 4 views
1

에 2 차원 배열을 읽고 난 2 차원 가변 배열에 다음을 읽고 싶은 :삼각형

3 
7 4 
2 4 6 
8 5 9 3 

내가 모든 입력에 열 크기를 늘려야합니다. 나는 그것을 정확하게하는 방법을 모르겠습니다.

int col = 1; 
int[][] values = new int[rows][col]; 
for(int i = 0; i < values.length; i++){ 
    for(int j = 1; j < col; j++) 
    { 
    values[i][j] = kb.nextInt(); 
    col++; 
    } 
} 
+0

배열을 사용해야합니까? 데이터를 읽은 후 데이터로 수행하려는 작업에 따라 최적의 데이터 구조가 아닐 수도 있습니다. – Edd

+1

열 크기를 줄이지도 문제가되지 않고 행 크기도 커지므로 문제가됩니다. 동적 목록이 필요합니다. – Juvanis

+0

단일 배열을 사용하여 모든 데이터를 유지할 수도 있습니다. 그런 다음 단일 인덱스 – Bee

답변

5

이 그것을해야 다음과 같이

내 코드입니다.

int[][] values = new int[rows][]; 
for(int i = 0; i < values.length; i++) 
{ 
    values[i] = new int[i+1]; 

    for(int j = 0; j < values[i].length; j++) 
    { 
     values[i][j] = kb.nextInt(); 
    } 
} 

기본적으로 2 차원 배열에 있어야하는 행 수를 정의하여 시작합니다.

루프 for 루프에서 길이가있는 각 행마다 1 차원 배열을 정의합니다.

+0

+1을 기반으로 배열의 2D 인덱스를 찾는 함수를 작성하면 몇 초 더 빨라졌습니다. –

+2

@davida. 내 다음 답변을 추가하기 전에 잠시 기다려야합니다.) – Baz

1

샘플 자바에서

// don't fix the second dimension 
int[][] values = new int[rows][]; 

for(i = 0; i < rows;i ++){ 
    //column size increases for every line input 
    values[i] = new int[i+1]; 

    for(j = 0; j < values[i].length; j++) { 
     values[i][j] = kb.nextInt(); 
    } 
} 

, 배열은 엄격하게 직사각형 될 필요가 없습니다. 변수 valuesrows - int 배열에 대한 참조의 요소 배열입니다. 여기에서 values[0]은 1 요소 int 배열이고, 값 [1]은 2 요소 인 int 배열입니다.

+0

내부 for 루프에서'col'을 좀 더 적절하게 변경해야합니다. – Baz

+1

@o_o .. 맙소사, 그'='와'+'와';'숨을들이 마시오 .. 그들이 죽으면 우리도 살 수 없다. 이번엔 내가 너를 위해 해줬 다. –