2014-04-23 3 views
0

길이가 다른 행이있는 정수 배열을 사용하면 전체 2 차원 배열을 인쇄 할 수 있지만 열별로 정렬 할 수 있습니까? 행을 기준으로 행을 수행하는 방법을 이해하지만이 문제로 어려움을 겪고 있습니다.열로 불규칙한 배열 열 인쇄

int[][] a = new int[5][]; 

a[0] = new int[4]; 
a[1] = new int[2]; 
a[2] = new int[5]; 
a[3] = new int[3]; 
a[4] = new int[1]; 

int longestRowLength = a[0].length; 
for(i = 1; i < a.length; i++) 
{ 
    if(a[i].length > longestRowLength) 
     longestRowLength = a[i].length; 
} 

for(i = 0; i < a.length; i++) 
{ 
    for(j = 0; j < a[i].length; j++) 
    { 
     a[i][j] = rand.nextInt(10); 
     System.out.print(a[i][j]); 
    } 
    System.out.println(); 
} 

for(j = 0; j < longestRowLength; j++) 
{ 
    for(i = 0; i < a.length; i++) 
    { 
     if(a[i].length < longestRowLength) 
      continue; 
     System.out.print(a[i][j]); 
    } 
} 
} 

이 작업을 수행했지만 문제는 배열 중 하나와 경계를 벗어나는 것을 인식하는 방법입니다. 내 경우의 (a [i]는 길이가 가장 긴 사람이 아닌 경우는 심지어 어떤 번호를 인쇄하지 않으므로 longestRowLength이 작동하지 않습니다 .length < 내가 이것을 달성 할 수있는 방법

편집 :.?

좋아 I 변경이 라인 :.?

 if(longestRowLength - a[i].length > 0 && (j+1) > a[i].length) 
      continue; 
     System.out.print(a[i][j]); 

지금은 작동하지만이 행으로 열을 인쇄 어쨌든 거기에 그것을 그냥 행에서와 같이 인쇄 할 뿐이다 열을 기준으로 열을 인쇄 할 수 있도록 (PS 그래 if 문의 첫 번째 조건은 필요 없음)

답변

0

마지막 루프를 다음으로 대체하십시오.

for(j = 0; j < longestRowLength; j++) 
{ 
    for(i = 0; i < a.length; i++) 
    { 
     if(a[i].length <= j) 
      continue; 
     System.out.print(a[i][j]); 
    } 
    System.out.println(); 
} 

열을 하나씩 인쇄하십시오.

 if(a[i].length <= j) 
      continue; 

당신이 할 수 있습니다 : 대신

 if(a[i].length <= j) { 
      System.out.print(' '); 
      continue; 
     } 

이 너무 짧은 배열을위한 공간을 남겨. 이 방법을 사용하면 바뀐 "거친"매트릭스를 인쇄 할 수 있습니다.