2015-07-12 41 views
-1

這裏是我的代碼:當我點擊計算時,我的程序如何凍結?

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); 
}        

這個程序應該計算(這是count)多少年需要例如用於$ 2000美元值的CD成爲$ 5000,8年利率%。然後這應該返回12.我所做的是創建一個while循環,直到$ 2000變成$ 5000或更多的利息,這表示爲intInitialinvest += (intInitialInvest * dblAnnualPercent);

每次我通過單擊「計算」按鈕運行程序時,程序凍結,並沒有做任何事情,然後我必須進入任務管理器關閉它。

+0

給出更多細節 – Moudiz

回答

0

小心整數除法

double dblAnnualPercent = intAnnualInterest/100; 

引起dblAnnualPercent值是0.0,這樣的話你遇到一個無限循環。您執行整數除法(例如,8/100=0,然後轉換爲雙倍(0.0,而不是0.05,就像您預期的那樣)。

double dblAnnualPercent = intAnnualInterest/100.; 

應該修復你的bug。

提示:添加斷言,運行您的問題啓用斷言

assert(dblAnnualPercent > 0.); 

會保存你(假設你用-ea運行你的程序)。

但也試試解決你的問題沒有迴路。有一個封閉的形式解決您的問題,使用數學而不是循環...該解決方案是一行只。

+0

哦,是的,這是問題!你能告訴我100後的具體時間嗎?對不起,我剛開始學習java! –

+0

這是一個浮點數而不是整數。閱讀整數部門。另外,請接受答案。 –

0

如果intInitialInvest=0dblAnnualPercent=0intEndingValue > 0您將永遠循環。

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

您必須在進入循環之前測試您的值,特別是當您似乎從某些輸入中讀取這些值時。這是一個可能的攻擊媒介,即使當你斷言這些值時,當你的算法中斷,當有人提供輸入,使得intInitialInvest=0intAnnualInterest<100

相關問題