Java树图仅保存插入的最后一项

时间:2017-11-10 06:29:10

标签: java hashmap

我正在创建一个矩阵并在地图中使用地图,但是当我填充矩阵时,它只获取最后一个值,其余值为null

代码:

for(int row = 0; row < this.factorPoints.size(); row++) {
    for(int col = 0; col < this.factorPoints.size(); col++) {
        TreeMap<Integer,Double> cell = new TreeMap<>();
        if(col == 0){
            cell.put(col, (double)1);
        }else{
            cell.put(col, Math.pow((double)this.factorPoints.get(row).getX(), col));
        }
        System.out.println("ROW:"+row+"; COL:"+col+";cell:"+cell);
        inverseMatrix.put(row, cell);
    }
}

我认为它是通过引用放置单元格,当我实例化单元格变量时,它将放置在inverseMatrix变量中的项目设置为null

控制台输出:

ROW:0; COL:0;cell:{0=1.0}
ROW:0; COL:1;cell:{1=1.0}
ROW:0; COL:2;cell:{2=1.0}
ROW:1; COL:0;cell:{0=1.0}
ROW:1; COL:1;cell:{1=2.0}
ROW:1; COL:2;cell:{2=4.0}
ROW:2; COL:0;cell:{0=1.0}
ROW:2; COL:1;cell:{1=3.0}
ROW:2; COL:2;cell:{2=9.0}

2 个答案:

答案 0 :(得分:1)

TreeMap初始化应该不在循环中。

在你的代码中,你创建了一个新的TreeMap实例,每次内部循环迭代时,这就是你的值错误的原因。

以下是工作代码:

TreeMap<Integer,Double> cell = new TreeMap<>();
for(int row = 0; row < this.factorPoints.size(); row++){
    for(int col = 0; col < this.factorPoints.size(); col++){
        if(col == 0){
            cell.put(col, (double)1);
        }else{
            cell.put(col, Math.pow((double)this.factorPoints.get(row).getX(), col));
        }
        System.out.println("ROW:"+row+"; COL:"+col+";cell:"+cell);
        inverseMatrix.put(row, cell);
    }
}

答案 1 :(得分:0)

您的Map位于内部for loop的本地,因此您声明的Map的范围将在该循环内。这意味着Mapfor-loop完成迭代后无法使用abandoned,它将为Map

您正在做的是创建iteration,存储数据,但您要限制其范围,以便您无法在Map之后访问它。因此, @Rehan Javed @rkosegi 表示您在外部循环之外声明iteration,以便即使在JSON之后它也可用