2011-12-24 6 views
0

각 셀이 집합 인 2 차원 배열이 있습니다. 각 세트의 크기는 예를 들어 0에서 5까지입니다.다양한 크기의 셀을 사용하여 2D 배열을 인쇄하는 방법은 무엇입니까?

2 차원 배열을 쉽게 읽을 수있는 형식으로 인쇄하려고합니다. '-'

HashSet<String>[][] schedule = (HashSet<String>[][]) new HashSet[3][5]; 
schedule[0][0].add("A"); 
schedule[0][0].add("B"); 
schedule[0][0].add("C"); 

schedule[0][2].add("D"); 
schedule[0][2].add("E"); 

schedule[1][0].add("F"); 
schedule[1][1].add("G"); 

schedule.print(); 

를 빼고 분명히

----------------- 
| A | | D | | | 
| B | | E | | | 
| C | | | | | 
----------------- 
| F | G | | | | 
----------------- 
| | | | | | 
----------------- 

을 생산하고 '|',하지만 당신은 요점을 파악.

내가 생각할 수있는 유일한 실행 가능한 솔루션은 각 열의 반복자를 작성하고 기억하므로 (동시에 5 개의 반복자를 기억함) 각 열을 반복하면서 한 번에 하나의 요소를 출력하여 더 이상 요소가 없을 때까지 모든 반복자.

G의 경우 첫 번째 행, 두 번째 열에 값이 없더라도 두 번째 열을 확장하는 것이 문제입니다. 각 탭을 탭으로 버퍼링하면이 문제를 해결할 수 있습니다.

물론이 해킹은 추가 열로 확장되지 않으므로 내가 잊어 버린 귀여운 트릭이 있는지 궁금합니다.

감사합니다.

+3

는'옵션을 JTable'되어 다음과 같이이와

는 결과는? – trashgod

+0

나는 그것을 조사 할 것이다! 감사. – Calvin

답변

0

코드를 약간 수정하면 (배열의 위치를 ​​인스턴스화하는 것을 잊었습니다!), 들쭉날쭉 한 세트를 확실히 인쇄 할 수 있습니다.

힌트 : HashSet과 함께 제공되는 iterator() 방법을 사용하십시오. 반복자는 객체 컬렉션 위로 이동하고 한 번에 하나씩 반환 한 다음 다시 호출 될 때까지 일시 중지하거나 반복 할 항목이 없습니다. 일반적으로 이터레이터에 대한 자세한 정보는 Wikipedia's Iterator article입니다.

이것을 사용하면 String 내부의 각 HashSet에서 결과를 수집하여 원하는대로 인쇄 할 수 있습니다.

코드 조각 :

Iterator first = schedule[0][0].iterator(); 
Iterator second = schedule[0][2].iterator(); 
// And so forth 


String firstResult = ""; 
String secondResult = ""; 
// And so forth 


while (first.hasNext()) { 
    firstResult += first.next() + "\t"; 
    if (!first.hasNext()) { 
     firstResult += "\n"; 
     } 
    } 
while (second.hasNext()) { 
    secondResult += second.next() + "\t"; 
    if (!second.hasNext()) { 
    secondResult += "\n"; 
    } 
} 
// And so forth 

System.out.print(firstResult + secondResult + someResult + anotherResult); 

는 빈칸 채우기는 독자들에게 운동이다.

A B C 
D E 
F 
G 
+0

도움을 주셔서 감사합니다. 내 질문에 이미 각 열에 대해 반복자를 사용하여 순차적으로 인쇄 할 것을 고려하고 있다고 언급했습니다. 그러나 방금 보여 주듯이, 내가 그린 것처럼 하향식 대신 왼쪽 - 오른쪽으로 인쇄합니다. 또한 새로운 열이있을 때 수동으로 반복자를 만드는 것은 좋은 습관이 아닙니다. 다른 열을 추가하고 싶다면 DRY 원리를 위반하는 또 다른 반복자를 만들어야하기 때문입니다. – Calvin

관련 문제