我知道存储信息的变量有问题。
在程序结束时,它会打印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.");
}
}
答案 0 :(得分:1)
osum
和rsum
都是整数,它们代表没有小数的数字。
任何只使用这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();