为什么当我点击计算时我的程序会死机?

How come my program freezes up when I click calculate?

这是我的代码:

private void btnCalculateActionPerformed(java.awt.event.ActionEvent evt) {                                             
    int intInitialInvest = Integer.parseInt(this.txtInputInitialInvest.getText());
    int intAnnualInterest = Integer.parseInt(this.txtInputAnnualInterest.getText());
    int intEndingValue = Integer.parseInt(this.txtInputEndingValue.getText());                
    double dblAnnualPercent = intAnnualInterest/100;

    int count = 0;
    while (intInitialInvest < intEndingValue){
        intInitialInvest += (intInitialInvest * dblAnnualPercent);
        count += 1;
    }
    this.lblOutputYears.setText("The number of years required is " + count);
}                               

这个程序应该计算年利率为 8% 的一张价值 2000 美元的 cd 变成 5000 美元需要多少年(即 count)。这应该 return 12. 我所做的是创建一个 while 循环,该循环 运行s 直到 2000 美元从利息变成 5000 美元或更多,由 intInitialinvest += (intInitialInvest * dblAnnualPercent);

表示

每次我通过单击 "Calculate" 按钮 运行 程序时,程序会冻结并且不执行任何操作,然后我必须进入任务管理器将其关闭。

如果 intInitialInvest=0dblAnnualPercent=0intEndingValue > 0 你将永远循环。

while (intInitialInvest < intEndingValue){
    intInitialInvest += (intInitialInvest * dblAnnualPercent);
    count += 1;
}

您必须在进入循环之前测试您的值,尤其是当您似乎从某些输入中读取这些值时。这是一个可能的攻击向量,即使当您断言这些值时,当您的算法中断时,当有人提供输入使得 intInitialInvest=0intAnnualInterest<100.

小心整数除法:

double dblAnnualPercent = intAnnualInterest/100;

导致 dblAnnualPercent 的值为 0.0,因此你 运行 进入无限循环。您执行整数除法(例如 8/100=0,然后 转换为双精度(0.0,而不是您预期的 0.05)。

double dblAnnualPercent = intAnnualInterest/100.;

应该修复你的错误。

提示:添加断言,运行启用断言的问题

assert(dblAnnualPercent > 0.);

本来可以救你的(假设你 运行 你的程序 -ea)。

但也尝试不用循环解决你的问题。您的问题有一个封闭形式的解决方案,使用数学而不是循环...该解决方案仅 一行