此for循环应该对树形图中包含的所有值求和。这是有效的,但在内循环之后,使用向上和向下的值来计算精度。似乎从未执行过。
我做错了什么?
// for each row
for (Entry<String, TreeMap<String, Integer>> table_row : table.entrySet()) {
// write the label
String row = table_row.getKey() + ",";
int up = 0;
int down = 0;
float accu = 0;
// for each treemap in the row
for (Entry<String, Integer> collumn : table_row.getValue().entrySet()) {
row += collumn.getValue() + ",";
down += collumn.getValue();//this works
if (collumn.getKey() == table_row.getKey()) {
up = collumn.getValue();
}
}
---------> accu = (up / down) * 100; //this is not executed??
System.out.println("t: " + up + " n: " + down + " a: " + accu);
row = row + Float.toString(accu) + " %";
writer.println(row);//this works too but output is always 0%
}
答案 0 :(得分:3)
你可能不希望在if比较中使用==,而是等于()......除非你期望它们是字符串的同一个实例。
答案 1 :(得分:3)
我认为您在询问为什么accu
始终是0
,如同内联您的评论一样。
accu = (up / down) * 100;
文字100
是int
以及up
和down
。所以结果可能会转到0
只需投放到float
,这样就不会失去精确度
accu = ((float)up / down) * 100;
这将在分组之前的演员阵容中起作用,因为如果float
的任何一个操作数,另一个操作数也会转换为float
,即使int
eger
答案 2 :(得分:1)
整数师!
您的down
值大于up
并向下舍入为零,因此每次分配accu
时,您实际上都是accu = (0) * 100
如果你正在寻找精确度,你应该组成上下浮动而不是整数,或者在你分裂前做一个演员。
答案 3 :(得分:0)
您遇到的问题是上下都是int
。将int除以int时,结果为int,其中任何十进制都被截断。看起来你想要一个百分比,所以你应该做类似的事情:
accu = ((float) up / down) * 100;