@Svettig finnepinne:
Viktigt att tänka på är att ditt program exekveras (körs) uppifrån och ner, därför skulle vi kunna dela in ditt program i olika delar.
Del 1: Först deklarerar och initierar du ett antal variabler som du tänkt att använda genom programmets gång. De flesta variablerna får värdet 0. Att tänka på: Används alla variabler?
String TotSalary;
int YearSalary;
double Below=0.0;
double over=0.0;
double screwed=0.0;
double Over=0.0;
double MidTaxes=0.0;
double HighTaxes=0;
String MoreDraw;
double Relief=0.0;
int mera=0;
Del 2: I denna del frågar du efter årsinkomsten hos personen, och beroende på vad de svarar ska olika saker utföras. Så om du nu t.ex. tittar på raden där du räknar ut MidTaxes, vad har Relief för värde? Vad förväntar du dig att det ska ha i detta läge? Även att tänka på: vad händer om du skriver in årsinkomsten 438900 eller 638500, vad säger dina if-satser?
TotSalary=JOptionPane.showInputDialog(null, "Årsinkomst?");
YearSalary=Integer.parseInt(TotSalary);
if(YearSalary<438900) {
JOptionPane.showMessageDialog(null, "Du betalar ingen statligskatt");//<438900 ingen statlig skatt
System.exit(0);
}
else if(YearSalary>438900&&YearSalary<638500)
MidTaxes=Relief-13100-(0.2*YearSalary);//årsinkomst mellan 438900 och 638500,lägg till 20% statlig skatt
else if(YearSalary>638500)
HighTaxes=Relief-13100-(YearSalary*0.25);//årsinkomst över 638500, lägg till 5% statlig skatt utöver 20%
else {
JOptionPane.showMessageDialog(null, "Beräkningen avbryten");
System.exit(0);
}
Del 3: I detta steg kör du en do-while loop, så länge variabeln mera är större än 0. Såg att jag i mitt föregående inlägg hade skrivit en kommentar som inte riktigt stämde, du skriver mera = +1, i mitt förra inlägg läste jag detta som "mera += 1", vilket är stor skillnad. "mera += 1" är samma sak som att skriva "mera = mera + 1", medan "mera = +1" är samma sak som att skriva "mera = 1". Men hur som helst, i detta avsnitt tilldelar du variablerna "MoreDraw" och "Relief" värden om man vill lägga till fler avdrag. Hint: Hur används dessa i sista delen av programmet?
do {
int fortsatt=JOptionPane.showConfirmDialog(null, "Vill du mata in fler skatteavdrag?Grundavdraget har redan blivit avdragen.",
"Fråga", JOptionPane.YES_NO_OPTION);
if(fortsatt==0) {
mera = +1;
MoreDraw=JOptionPane.showInputDialog(null, "Mata in avdraget");
Relief=Relief+Double.parseDouble(MoreDraw);
}
else if(fortsatt==1)
mera = +0;
else {
JOptionPane.showMessageDialog(null, "Beräkningen avbryten");
System.exit(0);
}
} while (mera>0);
Del 4: Det sista du gör är att skriva ut den statliga skatten. Viktigt att tänka på här är att " Statlig skatt: " + MidTaxes + HighTaxes är en sträng, så det sker inga beräkningar här (MidTaxes + HighTaxes är ingen beräkning) då allt görs om till strängar som slås ihop. Ett exempel: Om MidTaxes har värdet 5 och HighTaxes har värdet 2, så kommer strängen "Statlig skatt: 52" att skrivas ut och inte "Statlig skatt: 7". Vill du göra en beräkning måste du alltså göra det innan du skriver ut det i din dialog.
JOptionPane.showMessageDialog(null," Statlig skatt: " + MidTaxes + HighTaxes);
Det kan vara bra att dela upp sitt program såhär i olika delar för att försöka förstå vad som händer. Ett annat sätt för att hitta fel i ditt program är ett debugga sin kod, det betyder att du kan sätta en brytpunkt på en viss rad i din kod, och när du sedan kör ditt program i "debug-mode" så stannar programmet där du satt brytpunkten och du kan se vad alla variabler har för värde i just det läget av koden. I din kod skulle du alltså kunna sätta en brytpunkt där du gör dina beräkningar som blir fel, för att se vad alla varibler har för värde som utgör beräkningen, t.ex Relief och YearSalary.
Detta blev långt, tanken är inte att lösa ditt problem, utan att försöka få dig att se hur du kan hitta det själv. Inom programmering är felsökning en viktig del, att kunna felsöka sin kod för att förstå vart det blir fel. "När denna beräkning utförs, vad förväntar jag mig att alla variabler ska ha för värde då och vad är deras faktiska värde".