2012-04-08 53 views
0

所以我for循環導致崩潰,我確切地知道爲什麼,但我不確定一種方法來重寫這個來讓它做我想要完成的事情。對於循環援助

我試圖讓它從每天的複利中拿出錢,並將其累計爲月(這是設置爲30天)。用戶輸入他們嘗試計算的天數。那麼造成這次事故的原因是如果他們放入除了可被30整除的東西之外的東西。

我很難想出一種方法來重寫這個,並可以使用任何建議。我希望它做些事情,如果他們把65放在一起計算2個月的價值,然後顯示爲3個月的不足天數。任何幫助總是非常感激。提前致謝。

for (int i = 0; i < numDays; i+=30){ 
    double cash=0; 
    for (int n=1; n < 30; n++){ 
     int currentDay; 
     currentDay= n+i; 
     cash=cash+dailyMoney[currentDay]; 
    } 
    month++; 
    if(monthlyChecks == null) 
     monthlyChecks = "\nCheck on month "+month+": $"+df.format(cash)+"\n"; 
    else 
     monthlyChecks = monthlyChecks+"\nCheck on month "+month+": $"+df.format(cash)+"\n"; 
} 

NUMDAYS是天用戶輸入的號碼.... monthlyChecks是String .... dailyMoney []是保持每一天的量陣列。

+1

建議I:不要使用double來進行財務計算http://epramono.blogspot.com/2005/01/double-vs-bigdecimal.html – matiasf 2012-04-08 02:35:02

+0

請提供完整的堆棧跟蹤。以及聲明並初始化'dailyMoney'數組的語句。 – 2012-04-08 02:35:08

+0

如何讓用戶輸入幾個月而不是幾天? – 2012-04-08 02:43:08

回答

1

好吧,聽起來好像你正在嘗試與你「的日子不足一個月3」做的是這樣的:(假設NUMDAYS是一個int)

numMonths = numDays/30 //If numDays is an int, this will round down. 
extraDays = numDays % 30 

for (int i = 0; i < numMonths; i+=30){ 
    double cash=0; 
    for (int n=1; n < 30; n++){ 
     int currentDay; 
     currentDay= n+i; 

     cash=cash+dailyMoney[currentDay]; 
    } 
    month++; 
    if(monthlyChecks == null) 
     monthlyChecks = "\nCheck on month "+month+": $"+df.format(cash)+"\n"; 
    else 
     monthlyChecks = monthlyChecks+"\nCheck on month "+month+": $"+df.format(cash)+"\n"; 
    } 
} 

//Then at some point 
Systme.out.println("Insuffiecent days for " + numMonth + 1 " months. " + 30 - extraDays " days short).") 
+0

謝謝,當我回來時,我會給出一個鏡頭 – steven 2012-04-08 02:59:37

+0

謝謝。我沒有完全使用這段代碼,但我確實使用了幾個部分,因此非常感謝。基本上我使用extraDays來計算是否有超過30天的額外天數。如果沒有,它會按原樣運行計算。如果有的話,我建立了一個不同的循環,這個循環可以在滿月的時候運行,並且在最後一個月顯示爲不足。再次感謝。 – steven 2012-04-08 17:43:55

1

考慮到用戶需要輸入天,可能像

int numMonths = numDays/30; 
int remainder = numDays % 30; 

System.out.println ("Calculating for " + numMonths + " months"); 

if (remainder != 0) { 
    numDays -= remainder; 
    System.err.println ("Insufficient days for month " + (numMonths + 1)); 
} 

這應該所有代碼的dailyMoney = new double[numDays]部分之前的其餘部分,包括(尤其是)之前。