Java中的简单计算问题

时间:2012-07-31 20:30:24

标签: java for-loop

此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 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

我认为您在询问为什么accu始终是0,如同内联您的评论一样。
accu = (up / down) * 100;
文字100int以及updown。所以结果可能会转到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;