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

Java 从排序列中查找缺少的值,并在这些位置插入空行,java,missing-data,Java,Missing Data,你好。我想做的是:我有一组键,值对,它们来自一个树映射,我把它写在一个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

你好。我想做的是:我有一组键,值对,它们来自一个树映射,我把它写在一个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();
...
。。。
int i=0;
for(整数键:rowMap.keySet()){
字符串行=键+“”;
for(整数[]行:rowMap.get(键)){
for(整数列:行){
行+=“”+列;
}                          
------>      }
i++;
if(键等于(i)){
writer.println(行);
}
否则{
int-dif=键-i;
int j;

对于(j=1;j

),DIF周围的部分有点混乱,但它不像你想象的那么复杂。在为某个键打印一行之前,只需打印最后一个键和当前(如果有的话)之间的所有空白行:

publicstaticvoid打印(分类地图、打印器){
int last=1;
for(int键:map.keySet()){
for(int i=last+1;i

(为了简单起见,我刚刚使用了
Arrays.toString(…)
来格式化一行。根据需要替换它。)代码是不完整的。我是什么?对不起,试图保持它干净但遗漏了部分。现在我尝试添加一些计数器来计数行号并将其与键号进行比较。谢谢您的答复。嗯,我明白了……但是空白行是在for循环中正确创建的。ove,因为我需要直到箭头的线条来创建树形图。你是什么意思?我认为代码包含了所有重要方面,可以很容易地修改以满足你的需要(输出格式、valu数据类型等)。好的,我知道了。谢谢。但是我怎么可以只打印没有键的值。我使用了map的values函数,但它打印“null”在每一行的开头…我的代码只打印映射的值。这很容易看出,因为键没有打印语句。这似乎是另一个问题。检查映射是如何构建的。在代码中有两个嵌套的for循环用于构造行字符串。这对我来说似乎很奇怪,因为映射值应该只有我想是一个整数数组。
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)));
    }
}