2012-07-31 78 views
1

这个for循环应该对树形图中包含的所有值进行求和。这是有效的,但在内部循环之后,上下值用于计算精确度。看来这从来没有被执行过。用Java简单计算的问题

我在做什么错?

  // 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

你确定没有例外吗? – kosa 2012-07-31 20:31:47

+0

没有什么是trowhn – jorrebor 2012-07-31 20:32:17

+0

然后,我想声明正在执行,但值可能是零 – kosa 2012-07-31 20:33:49

回答

1

整数除法!

down值大于你的up大,向下取整到零,所以每次分配accu时候,你实际上在做这个accu = (0) * 100

如果您正在寻找精度,你应该做上下浮动,而不是或者在分割之前进行演员制作。

3

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

+0

向上和向下都是整数,所以我不认为equals()在那里工作。 – kosa 2012-07-31 20:34:23

+0

没有钥匙与==比较,他们是字符串。 – cjstehno 2012-07-31 20:35:13

+0

注意...这会导致零值。 – cjstehno 2012-07-31 20:35:38

3

我假设你问为什么accu总是0在内联你的意见。
accu = (up/down) * 100;
字面100int以及updown。所以结果可能会变为0

只需投射到float,这样您就不会失去精确度。
accu = ((float)up/down) * 100;
这将作为剧组将先师,自如果一个操作数,如果float另一个也被转换为float即使int埃格尔

0

您遇到的问题是上下都是int s。当你用整数除int时,结果是一个int,任何十进制都被截断。它看起来像你想要的百分比,所以你应该这样做:

accu = ((float) up/down) * 100;