Switch-Case zur Berechnung der Einkommensteuer

Sabrina2301

Mitglied
Hallo zusammen,

ich soll mit Hilfe der Case-Struktur den (Grenz-) Steuersatz in 4 Stufen abbilden:

bis 9.999 steuerfrei
10.000 bis 19.999 10 %
20.000 bis 29.999 20 %
ab 30.000 30 %

Die Einkommensteuer soll sich unter Vorgabe des zu versteuernden Einkommens berechnen. Zu beachten ist hierbei, dass es kein deutsches Steuergesetz ist sondern nach dem amerikanischen Prinzip aufgebaut ist. Sprich 9.999 sind immer steuerfrei auch wenn das Einkommen 10.000 beträgt. Wenn das Einkommen 10.000 beträgt muss nur 1 € versteuert werden.

Dies ist auch mein Problem. Bei einem Einkommen von 10.000 € wird in der Console trotzdem 0 € als Einkommensteuer ausgegeben. Wo liegt mein Fehler?

public class Esteuer {

public static double est (int e) {
double esteuer = 0;
int fall;

if (e <= 9999) {
fall = 1;
}
else if ((e >= 10000) && (e < 20000)) {
fall = 2;
}
else if ((e >= 20000) && (e < 30000)) {
fall = 3;
}
else {
fall = 4;
}

switch (fall) {
case 1:
esteuer = 0;
break;
case 2:
e = e-9999;
esteuer = (e*10)/100; //hier noch Fehler mit 0,10 cent
break;
case 3:
esteuer = 10000 * 10 / 100;
esteuer = esteuer + (e-20000)*20 /100;
break;
case 4:
esteuer = 15000 * 20 / 100;
esteuer = esteuer + (e-30000)*30 /100;
break;
}
return esteuer;
}
}


Ausgabe Console:

5000 ,00 ,00 %
6000 ,00 ,00 %
7000 ,00 ,00 %
8000 ,00 ,00 %
9000 ,00 ,00 %
10000 ,00 ,00 %
11000 100,00 ,91 %
 

krgewb

Top Contributor
Bitte immer in Code-Tags posten.
Java:
public class Esteuer {

    public static double est (int e) {
        double esteuer = 0;
        int fall;

        if (e <= 9999) {
            fall = 1;
        }
        else if ((e >= 10000) && (e < 20000)) {
            fall = 2;
        }
        else if ((e >= 20000) && (e < 30000)) {
            fall = 3;
        }
        else {
            fall = 4;
        }

        switch (fall) {
        case 1:
            esteuer = 0;
            break;
        case 2:
            e = e-9999;
            esteuer = (e*10)/100; //hier noch Fehler mit 0,10 cent
            break;
        case 3:
            esteuer = 10000 * 10 / 100;
            esteuer = esteuer + (e-20000)*20 /100;
            break;
        case 4:
            esteuer = 15000 * 20 / 100;
            esteuer = esteuer + (e-30000)*30 /100;
            break;
        }
        return esteuer;
    }
}
Code:
5000 ,00 ,00 %
6000 ,00 ,00 %
7000 ,00 ,00 %
8000 ,00 ,00 %
9000 ,00 ,00 %
10000 ,00 ,00 %
11000 100,00 ,91 %
 

White_Fox

Top Contributor
Der Fehler liegt schonmal darin, daß das switch-Statement hier so erstmal Blödsinn ist. Die reine Berechnung und Ausgabe kannst du in den widerlich vielen If-Statements schon machen.
 
X

Xyz1

Gast
Wandle int zu long,
multipliziere mit 10L,
wandle long zu double,
dividiere durch 100.0,
das Ergebnis ist eine so genannte doppelte Fließkommazahl.
 

White_Fox

Top Contributor
Mit Enumerationen ist das vielleicht etwas mit Kanonen auf Spatzen, aber dann ist auch das switch-Statement besser lesbar:

Java:
public enum TaxClass {
    FREE(0, 9999, 0),
    CLASS1(10000, 19999, 10),
    CLASS2(20000,29999, 20),
    CLASS3(3000, Integer.MAX_VALUE, 30);
    
    private final int lowerBound;
    private final int upperBound;
    private final int taxRate;

    private TaxClass(int lowerBound, int upperBound, int taxRate) {
        this.lowerBound = lowerBound;
        this.upperBound = upperBound;
        this.taxRate = taxRate;
    }
    
    static TaxClass get(int income){
        for(TaxClass tc : values()){
            if(income >= tc.lowerBound && income <= tc.upperBound){
                return tc;
            }
        }
        return CLASS3;
    }
    
    public int lowerBound(){
        return lowerBound;
    }
    
    public int upperBound(){
        return upperBound;
    }
    
    
    public static void main(String[] args){
        int income = 5000;
        
        TaxClass t = TaxClass.get(income);
        
        System.out.println("Steuersatz: " + t.taxRate + "%");
        
        //Wenn es switch sein muß:
        System.out.print("Mit Switchstatement: ");
        switch(t){
            case FREE:
                System.out.println("0%");
                break;
            case CLASS1:
                System.out.println("10%");
                break;
            case CLASS2:
                System.out.println("20%");
                break;
            case CLASS3:
                System.out.println("30%");
                break;
                default:
                    System.out.println("Du hast vergessen, eine Steuerklasse zu implementieren. Fehler!!!");
                break;
            
        }
    }
}
 

White_Fox

Top Contributor
Wieso? So sieht doch der aktuelle Stand aus. Wenn eine vierte Klasse eingeführt werden soll, dann fügst du halt eine Class4 hinzu, änderst den Parameter upperBound von Class3, und alles ist wieder beim Alten. Die Methode get() kann in exakt der gleichen Weise weiterverwendet werden, im Hauptprogramm müßte absolut nichts geändert werden - außer, das Class4 einen weiteren case bekommen muß. Ohne switch wäre das kein Problem.

Oder übersehe ich da was?

Wobei ich noch anfügen will, das ich switch und Enumerationen recht gerne zusammen verwende. In meinem CLS-Projekt habe ich das an verschiedenen Stellen etwa so gelöst wie oben. Und den Fall das nachträglich erweitern zu wollen, hatte ich auch schon mehrmals und ging ohne Kopfzerbrechen. Das geht sogar so gut das ich das auch so mache wenn ich vorher schon genau weiß, daß das noch weiter wachsen wird.
 

Blender3D

Top Contributor
Dies ist auch mein Problem. Bei einem Einkommen von 10.000 € wird in der Console trotzdem 0 € als Einkommensteuer ausgegeben
Java:
public class start {
    public static void main(String[] args) {
        TaxIncome.printTax(1000);
        TaxIncome.printTax(10000);
        TaxIncome.printTax(20000);
        TaxIncome.printTax(30000);
    }
}

Java:
public class TaxIncome {
    public static double calculateTaxFactor(int income) {
        if (income <= 9999)
            return 0;
        if (income < 20000)
            return .1;
        if (income < 30000)
            return .2;
        return .3;
    }

    public static double calculateTax(int income) {
        double factor = calculateTaxFactor(income);
        if (factor == 0)
            return 0;
        return (income - 9999) * factor;

    }

    public static void printTax(int income) {
        System.out.println("-----------------------------");
        System.out.println("Income:\t" + "€ " + income);
        double tax = calculateTaxFactor(income);
        System.out.println("Factor:\t" + "% " + tax * 100);
        System.out.println("Total:\t" + "€ " + calculateTax(income));
    }
}
 

Blender3D

Top Contributor
Cases verlangen einen konstanten Ausdruck. Wenn in der Aufgabenstellung steht Switches anzuwenden dann ist das die einzigste Variante.
Einmal abgesehen davon, dass switch hier wirklich, so wie @White_Fox korrekt formuliert hat, Blödsinn ist . Kann man das dann aber auch einfacher lösen.
Java:
public static double calculateTaxIncome(int income) {
        int taxLevel;
        for (taxLevel = 1; taxLevel < 4; taxLevel++) {
            if (income < 10000 * taxLevel)
                break;
        }
        income -= 9999;
        switch (taxLevel) {
        case 1:
            return 0;
        case 2:
            return .1*income;
        case 3:
            return .2*income;
        default:
            return .3*income;
        }
    }
PS. Es gibt keine einzigste Variante. Das würde ja bedeuten von all den einzigen Varianten nimmt man die Einzigste (Superlativ ??) . Du meintest wohl die einzige Variante. ;)
 
X

Xyz1

Gast
Mit "einzigste" Variante meinte ich, es ging mir ums Prinzip, die TaxClazz vorher zu berechnen und sie im Switch Case als konstanten Ausdruck einzusetzen. Wie genau diese Berechnung formuliert wird, eigentlich nicht so...

/e Ich weiß natürlich dass ein Superlativ nicht mehr gesteigert werden kann... Persil wäscht so weiß, weißer geht's nicht :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Mehrere Werte in einem Switch Case parallel überprüfen Java Basics - Anfänger-Themen 23
D Switch Case Methode aufrufen Java Basics - Anfänger-Themen 3
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
L Switch-Case Multiplikation wird nicht ausgegeben Java Basics - Anfänger-Themen 1
P9cman Vokal Zähler mit switch case und for-Schleife Java Basics - Anfänger-Themen 4
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
1 Switch Case Java Basics - Anfänger-Themen 3
T Alternative für switch case Java Basics - Anfänger-Themen 1
W Taschenrechner mit Switch case Java Basics - Anfänger-Themen 4
B Notensystem Switch-Case Java Basics - Anfänger-Themen 31
F Switch case wird als char nicht erkannt.... Java Basics - Anfänger-Themen 6
H Frage zur if-Bedingung bzw switch case Java Basics - Anfänger-Themen 6
S switch case fängt beim letzten case an Java Basics - Anfänger-Themen 6
F Switch Case Problem mit Regex lösen? Java Basics - Anfänger-Themen 6
W Wieso funktioniert mein Switch Case nicht ?! Java Basics - Anfänger-Themen 9
F Switch Case Modulo berechnen Java Basics - Anfänger-Themen 12
S Switch-Case für eine Array-Zuordnung Java Basics - Anfänger-Themen 5
S switch und case Java Basics - Anfänger-Themen 1
D Klassen Problem bei switch-case? Java Basics - Anfänger-Themen 2
B Wiederholen einer if/switch-case Schleife Java Basics - Anfänger-Themen 9
X Nach switch case weiter mit Auswahl Java Basics - Anfänger-Themen 7
T switch case und continue Java Basics - Anfänger-Themen 5
D switch case Code Java Basics - Anfänger-Themen 3
F Erste Schritte Switch case vs. Verschachtelte If Anweisung Java Basics - Anfänger-Themen 11
K Variablen RETURN in Case-Switch / This method must return a result of type Item Java Basics - Anfänger-Themen 4
R Switch: Nach durchlaufen des Case wieder zum Menü Java Basics - Anfänger-Themen 3
A Switch Case Java Basics - Anfänger-Themen 5
T Erste Schritte switch case Anweisung und if else Verzweigungen? Java Basics - Anfänger-Themen 6
A ArrayList-iteration mit Prüfung auf instanceof durch switch case? Java Basics - Anfänger-Themen 13
P Switch Case - Fließkommazahl Java Basics - Anfänger-Themen 2
lulas[]args Switch Schleife - orphaned case Java Basics - Anfänger-Themen 27
T kleines problem mit switch case Java Basics - Anfänger-Themen 11
R Switch/Case frage: Java Basics - Anfänger-Themen 12
K Input/Output switch case - Parameterübergabe args[0] Java Basics - Anfänger-Themen 34
P Compilerfehler bei switch-case Java Basics - Anfänger-Themen 18
D Switch und Case Java Basics - Anfänger-Themen 3
F Ps to kW Konvertierer switch-case Problem Java Basics - Anfänger-Themen 4
Q switch case hier möglich Java Basics - Anfänger-Themen 10
A Switch-Case Problem Java Basics - Anfänger-Themen 17
A Do While mit Switch Case Java Basics - Anfänger-Themen 2
berti99 Switch-Case || Problem... Java Basics - Anfänger-Themen 6
R Switch-Case Selektion Java Basics - Anfänger-Themen 13
O Switch-Case - Case 4 erhöhen Java Basics - Anfänger-Themen 9
M Frage zu Mehrfachauswahl mit switch ... case Java Basics - Anfänger-Themen 3
R Umlaute mit Switch-Case tauschen Java Basics - Anfänger-Themen 26
J switch-case Java Basics - Anfänger-Themen 19
G Switch-Case harmoniert nicht mit Random-Zahl Java Basics - Anfänger-Themen 3
I If abfrage in switch case einbauen Java Basics - Anfänger-Themen 5
R Erlaubte Selektoren bei Switch-Case Java Basics - Anfänger-Themen 2
Silas89 String in switch - case Java Basics - Anfänger-Themen 19
G Switch Case Java Basics - Anfänger-Themen 8
G zu blöd für switch case? Java Basics - Anfänger-Themen 6
G switch-case mit Strings Java Basics - Anfänger-Themen 7
T Switch Case Java Basics - Anfänger-Themen 6
A Aus switch case an den Anfang? Java Basics - Anfänger-Themen 7
P switch-case Konstrukt auch mit case i < 6: s = 6 ? Java Basics - Anfänger-Themen 10
G switch-case mit Fehler auf return-Wert-Typ Java Basics - Anfänger-Themen 2
S Zählen mit switch case Java Basics - Anfänger-Themen 8
J Aufgabe mit Arrays, Schleifen & Switch/Case Java Basics - Anfänger-Themen 7
M switch-case und array Java Basics - Anfänger-Themen 3
C switch-case mit bedingungen? Java Basics - Anfänger-Themen 5
C Switch / Case Problem, break funktioniert nicht! Java Basics - Anfänger-Themen 3
J Switch Anweisung: Case "Wert1" bis "Wert2&quo Java Basics - Anfänger-Themen 2
D switch case must be constant expression Java Basics - Anfänger-Themen 7
A Switch Case Java Basics - Anfänger-Themen 4
G Mit Switch/Case Zahlen zu Array hinzufügen Java Basics - Anfänger-Themen 14
M HILFE bei switch & case Java Basics - Anfänger-Themen 15
A switch case mit einem String Java Basics - Anfänger-Themen 4
M switch case Java Basics - Anfänger-Themen 5
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
M error: '.class' expected switch(char) Java Basics - Anfänger-Themen 32
A switch statement Java Basics - Anfänger-Themen 4
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
X Enum Abfrage ohne if, for, while oder switch Java Basics - Anfänger-Themen 21
Lion.King switch-Befehl Java Basics - Anfänger-Themen 6
U Warum kann ich die Methode in der ENUM Klasse nicht aufrufen? Und warum geht die Switch nicht? Java Basics - Anfänger-Themen 8
U Warum gibt das eine Nullpointerexception? (Switch) Java Basics - Anfänger-Themen 6
C if-Konstrukt durch switch-Konstrukt ersetzen Java Basics - Anfänger-Themen 14
C Taschenrechner (switch) in Taschenrechner mit Methoden umwandeln Java Basics - Anfänger-Themen 115
V Switch Methode macht Code kaputt Java Basics - Anfänger-Themen 18
J Parameterübergabe in switch? Java Basics - Anfänger-Themen 2
M Switch Java Basics - Anfänger-Themen 2
F Erste Schritte Frage zu simplem Taschenrechner(switch) Java Basics - Anfänger-Themen 16
NoMercy BitFlags Programm (switch on/off , swap und isSet) Java Basics - Anfänger-Themen 7
L Taschenrechner mit switch und while funktioniert noch nicht richtig Java Basics - Anfänger-Themen 22
B Problem bei switch statement Java Basics - Anfänger-Themen 4
E Input/Output Switch ausgabe anpassen bzw. anders darstellen Java Basics - Anfänger-Themen 13
A Warum funktioniert switch aber nicht if/else? Java Basics - Anfänger-Themen 23
K Erste Schritte switch - Warum sind long/float/double/... nicht erlaubt? Java Basics - Anfänger-Themen 5
Ponychan95 Erste Schritte Switch fällt immer bis zum default durch Java Basics - Anfänger-Themen 4
P Bei Switch-Anweisung wird default-Anweisung angezeigt Java Basics - Anfänger-Themen 4
D kleiner Taschenrechner mit switch fehlerhaft Java Basics - Anfänger-Themen 1
O This in switch anweisung Java Basics - Anfänger-Themen 5
V Fehlerhafte BufferedReader/switch Benutzung? Java Basics - Anfänger-Themen 2
R Methoden Switch wählt das Falsche Java Basics - Anfänger-Themen 17
B Erste Schritte Addition von double in switch-Anweisung Java Basics - Anfänger-Themen 2
M Endlosschleife bricht durch switch ab Java Basics - Anfänger-Themen 17
D Array in switch Java Basics - Anfänger-Themen 3
Devil0s if vs. switch Java Basics - Anfänger-Themen 27
F Reset in der switch Anweisung Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben