我正在创建一个矩阵并在地图中使用地图,但是当我填充矩阵时,它只获取最后一个值,其余值为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}
答案 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
的范围将在该循环内。这意味着Map
在for-loop
完成迭代后无法使用abandoned
,它将为Map
。
您正在做的是创建iteration
,存储数据,但您要限制其范围,以便您无法在Map
之后访问它。因此, @Rehan Javed 和 @rkosegi 表示您在外部循环之外声明iteration
,以便即使在JSON
之后它也可用