2012-04-08 16 views
0

Also meine for-Schleife verursacht einen Absturz und ich weiß genau warum, aber ich bin mir nicht sicher über eine Möglichkeit, dies neu zu schreiben, um es zu tun, was ich zu erreichen versuche.For Loop-Unterstützung

Ich versuche es zu bekommen, um Geld aus einem Zinseszins jeden Tag herauszunehmen und es für den Monat aufzuschlagen (der für immer 30 Tage gesetzt wird). Der Benutzer gibt die Anzahl der Tage ein, für die er zu berechnen versucht. Also, was verursacht den Absturz ist, wenn sie etwas anderes als etwas teilbar durch 30 setzen.

Ich habe Schwierigkeiten mit einer Möglichkeit, um dies neu schreiben und könnte irgendwelche Vorschläge verwenden. Ich möchte, dass es etwas tut, wenn sie 65 eingeben, es berechnet 2 Monate wert und dann wie ungenügende Tage für Monat 3 anzeigen. Jede Hilfe wird immer sehr geschätzt. Danke im Voraus.

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 ist der Benutzer eingegebene Anzahl der Tage .... monthlyChecks ist ein String .... dailyMoney [] das Array, das die Menge für jeden Tag hält.

+1

Vorschlag I: Verwenden Sie nicht doppelt für finanzielle Berechnungen http://epramono.blogspot.com/2005/01/double-vs-bigdecimal.html – matiasf

+0

Bitte geben Sie den kompletten StackTrace. Und die Anweisungen, die das Array 'dailyMoney' deklarieren und initialisieren. –

+0

Wie wäre es mit der Frage, ob der Benutzer Monate statt Tage eingeben soll? –

Antwort

1

Okay, klingt für mich wie das, was Sie versuchen, mit Ihren „nicht genügend Tagen Monat 3“ ist, dies zu tun: (Unter der Annahme, numdays ist ein 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

Danke, ich gebe das eine Chance, wenn ich zurück bin – steven

+0

Danke. Ich habe diesen Code nicht ganz benutzt, aber ich habe ein paar Teile benutzt, die du eingegeben hast, also danke. Im Grunde nutzte ich die extraDays, um herauszufinden, ob es mehr als 30 zusätzliche Tage gab. Wenn nicht, dann lief das Kalkül wie es war. Wenn es da wäre, würde ich eine andere for-Schleife erstellen, die die vollen Monate durchläuft und am Ende hat es den letzten Monat als unzureichend angezeigt. Danke noch einmal. – steven

1

Da Benutzer Tage eingeben erforderlich , vielleicht so etwas wie

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

Dies sollte alle vor dem Rest des Codes platziert wird, einschließlich (und vor allem) vor dem dailyMoney = new double[numDays] Teil.