在while循环中增加数字时获得负值



我正在尝试创建一个程序,如果我每天将每日贡献增加到以前和初始值,则计算我需要多少天才能节省X笔钱。

例如:我第一天的初始捐款是2,第二天是4,第三天是6,以此类推,所以3天的总捐款将是12。

我的程序现在看起来是这样的:

int startingValue = 2;
int dailyAmount = startingValue;
int pot = 0;
int desiredMoney = 43554;
int daysSaved =0;

while (pot != desiredMoney){
pot += dailyAmount;
dailyAmount += startingValue;
daysSaved++;
}
System.out.println("Daily amount needed : " + dailyAmount + " Days saved : " + daysSaved + " Money in the pot : " + pot);

程序的当前输出如下:

Daily amount needed : 294923972 Days saved : 147461985 Money in the pot : 43554

这看起来不太对,但我不知道为什么。当我在调试模式下运行它时,它对前几次运行是有意义的,但是当我将sout语句放在while循环中一段时间后,我看到像这样的负数:

Daily amount needed : 1054054 Days saved : 527026 Money in the pot : -1415942538

我希望看到daysSaved为1000天左右,但我的程序显然是坏的。将感谢任何帮助!

第一个问题:为什么加法的结果是负数?整数溢出。Java的int是32位有符号整数。有符号整数的最大安全值是2147483647。只添加1,它将滚动到-2147483648

在维基百科上阅读更多关于整数溢出的信息。

回答你问题的第二部分。pot != desiredMoney非常不太可能发生,因为你不断向你的锅中添加一个不断增加的数字。你想要的语义可能是pot < desiredMoney;当钱不够时,继续这样循环。

最新更新