2013-11-10 54 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))); 
    } 
} 

(爲簡單起見,我只是用格式化行。根據需要更換。)

+0

謝謝你的回覆。嗯,我明白了......但空行是在for循環中創建的?我怎樣才能將它與上面的代碼結合起來,因爲我需要直到箭頭創建樹形圖的行。 – Omen

+0

你是什麼意思?我認爲代碼包含所有重要的方面,可以很容易地修改以適應您的需求(輸出格式,數據類型等)。 – isnot2bad

+0

好的,我明白了。謝謝。但是,我怎樣才能打印沒有密鑰的值。我使用了map的值函數,但是它在每一行的開頭都打印出「null」... – Omen

相關問題