2013-11-10 4 views
0

글쎄, 안녕하세요. 내가하려고하는 것은 이것이다 : 나는 txt 파일에 쓰는 트리 맵에서 나오는 키, 값 쌍을 가지고있다. 출력은 다음과 같습니다.정렬 된 열에서 누락 된 값을 찾고이 위치에 빈 줄을 삽입하십시오.

1 4 2 8 2 
3 8 2 5 1 
6 9 1 4 3 
etc 

키가 첫 번째 열에 있고 정렬됩니다. 내 목표는 첫 번째 열에 누락 된 값의 위치를 ​​찾고, 누락 된 각 번호에 대해 빈 줄을 삽입하고 첫 번째 열이없는 파일에 작성하는 것입니다. 그래서 파일의 목록을 잘하면 그렇게 될 것이다 : 나는 모든 키 라인 사이의 차이를 계산하고 같은 라인,하지만 아무것도를 표시하려고했습니다

4 2 8 2 
     //blank line 
8 2 5 1 
     //blank line 
     //blank line 
9 1 4 3 
etc 

. 어떤 제안이라도 인정 될 것입니다.

... 
int i = 0; 
for (Integer key : rowMap.keySet()) { 
        String row = key + ""; 

        for (Integer[] rows : rowMap.get(key)) { 
         for (Integer col : rows) { 
          row += " " + col; 
         }       
     ------>  } 
      i++; 
      if (key.equals(i)){ 
         writer.println(row); 
        } 
        else { 
         int dif = key-i; 
         int j; 
         for (j=1; j<=dif; j++){ 
          writer.println(""); 
         } 
         writer.println(row); 
        } 
      } 
       writer.close(); 
... 
+0

코드가 완전하지 않습니다. 나 뭐야? – isnot2bad

+0

예, 죄송합니다. 깨끗하게 유지하려고했지만 일부 부품이 누락되었습니다. 이제 해결되었습니다. 줄 번호를 계산하고 키 번호와 비교하기 위해 카운터를 추가하려고했습니다. – Omen

답변

0

dif 주위의 부분이 조금 혼란 스럽습니다. 그러나 생각보다 덜 복잡합니다. 당신이 특정 키에 대한 행을 인쇄하기 전에 (일부가있는 경우), 당신은 단지 마지막 키와 현재 사이의 모든 빈 줄을 인쇄 할 수 있습니다

public static void print(SortedMap<Integer, int[]> map, PrintWriter writer) { 
    int last = 1; 
    for (int key : map.keySet()) { 
     for (int i = last + 1; i < key; i++) { 
      writer.println(); 
     } 
     last = key; 
     writer.println(Arrays.toString(map.get(key))); 
    } 
} 

(단순성을 위해 난 그냥 형식을 Arrays.toString(...)을 사용 행을 교체하십시오. 원하는대로 바꾸십시오.)

+0

답장을 보내 주셔서 감사합니다. 흠, 알 겠어 ...하지만 빈 줄은 for 루프에서 만들어 지니? 그리고 위의 코드와 어떻게 조합 할 수 있습니까? 왜냐하면 화살표까지 트리밍을 만들 필요가 있기 때문입니다. – Omen

+0

무슨 뜻인가요? 코드에는 모든 중요한 측면이 포함되어 있으며 사용자의 요구 (출력 형식, 값 데이터 형식 등)에 맞게 쉽게 수정할 수 있다고 생각합니다. – isnot2bad

+0

좋아, 알았다. 감사. 그러나 키없이 값만 어떻게 인쇄 할 수 있습니까? 지도의 값 기능을 사용했지만 모든 행의 시작 부분에 "null"을 인쇄합니다 ... – Omen

관련 문제