从已排序的列中查找缺失值,并在这些位置插入空行

时间:2013-11-10 01:13:37

标签: java missing-data

嗯,你好。我想要做的是:我有一组来自树图的键值对,我在txt文件中写入。输出如下:

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

键位于第一列,并且已排序。我的目标是在第1列中找到缺失值的位置,为每个缺失的数字插入一个空行,并将它们写入没有第一列的文件。所以文件中的列表可能就是这样:

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();
...

1 个答案:

答案 0 :(得分: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(...)格式化一行。根据需要替换它。)