1

这个 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%
        }
4

4 回答 4

3

您可能不希望 == 在您的 if 比较中,而是 equals()... 除非您期望它们是字符串的同一个实例。

于 2012-07-31T20:32:51.423 回答
3

我假设您在问为什么accu总是0与您的评论一样。
accu = (up / down) * 100;
字面100量是 aint以及updown。所以结果可能四舍五入0

只是投到,float这样你就不会失去精度。
accu = ((float)up / down) * 100;
这将起作用,因为强制转换将在除法之前,并且因为如果一个操作数如果float另一个也被转换为float即使integer

于 2012-07-31T20:32:55.093 回答
1

整数除法!

您的down值大于您的值up并向下舍入为零,因此每次分配accu时,您实际上都是在执行此操作accu = (0) * 100

如果您正在寻找精度,您应该制作上下浮动而不是整数,或者在除法之前进行强制转换。

于 2012-07-31T20:35:27.197 回答
0

您遇到的问题是 up 和 down 都是ints。当您将一个 int 除以一个 int 时,结果是一个任何小数都被截断的 int。看起来你想要一个百分比,所以你应该这样做:

accu = ((float) up / down) * 100;
于 2012-07-31T20:37:58.970 回答