功能给出错误的结果

时间:2015-03-15 15:05:54

标签: java swing

我知道存储信息的变量有问题。

在程序结束时,它会打印0.0的速率。

我一直试图找出程序中逻辑或语法错误。我相信它可能与变量为0有关,我还尝试在count == floor时将函数插入循环。

import javax.swing.*;

public class pickanumber {
  public static void main(String[] args) {
    int floor=1, rooms, occupants, rsum = 0, osum = 0;
    String amount;

    do {
      amount = JOptionPane.showInputDialog("Enter total floors.");
      floor = Integer.parseInt(amount);
    } while (floor <= 0);

    for (int count = 1; count <= floor; count++) {
      if (floor==13) count++;

      do {
        amount = JOptionPane.showInputDialog("Enter total rooms on floor "+count+".");
        rooms = Integer.parseInt(amount);
      } while(rooms <= 9);

      rsum += rooms;

      do {
        amount = JOptionPane.showInputDialog("Enter occupants on floor "+count+".");
        occupants = Integer.parseInt(amount);
      } while ((occupants > rooms)||(occupants < 0));

      osum += occupants;
    }

    int rate = (osum/rsum)*100;
    JOptionPane.showInputDialog("occupancy is at "+rate+"% capacity.");
  }
}

3 个答案:

答案 0 :(得分:1)

osumrsum都是整数,它们代表没有小数的数字。

任何只使用这2个整数的数学运算都会返回一个整数。

所以osum/rsum将返回

  • 0 if osum < rsum
  • 1 if rsum <= osum < 2*rsum

如果你想获得这个分区的十进制值,你可以

  • 将您的rate定义为double类型,以便包含小数。
  • 在操作
  • 中将至少一个变量投射为double

你应该以:

之类的结尾
double rate = (((double) osum)/rsum)*100;

答案 1 :(得分:0)

问题在于我猜的数据类型(或至少我无法想到其他任何事情)。 (osum/rsum)的结果必须是整数,因此几乎总是0(或1,如果osum == rsum)。简单地在分割之前将它们加倍,然后将完整计算的结果转换回整数,事情应该很好。

答案 2 :(得分:0)

Double drsum = (double) rsum;    
Double dosum = (double) osum;
Double rate = (dosum/drsum)*100;
int i = rate.intValue();