Preisberechnung Rechnung

Hallo,

Ich habe da ein Problem und zwar habe ich eine Aufgabe von meinem Lehrer bekommen die ich bearbeiten muss und habe sie auch bis jetzt so gut wie möglich gelöst und bin schon fast am Ziel leider nur fast.Ich habe das Problem das sich das Fenster schließt wenn eigentlich das Ergebnis der Rechnungen da stehen soll. Das ist bis jetzt das geschriebene in der java Datei:

import javax.swing.JOptionPane;

public class BruttoVKPreisBerechnen {
  public static void main(String[] args) {
     String eingabe, ausgabe;
     int anzahl;
     double nEinzelpreis,Gesamtpreis,MWST,MWSTBetrag,BruttoVKPreis;
      
     eingabe = JOptionPane.showInputDialog("Geben Sie die Artikelzahl ein: ");
     anzahl = Integer.parseInt(eingabe);
     eingabe = JOptionPane.showInputDialog("Geben Sie den Nettoeinzelpreis ein: ");
     nEinzelpreis = Double.parseDouble(eingabe);
      
     Gesamtpreis =nEinzelpreis*anzahl;

     switch ("Warengruppe") {
         case "Warengruppe1" : MWST =3.5;
         case "Warengruppe2" : MWST =7.0;
         case "Warengruppe3" : MWST =10.5;
         case "Warengruppe4" : MWST =19.0;
     

     BruttoVKPreis=Gesamtpreis*MWST;
     MWSTBetrag=BruttoVKPreis-Gesamtpreis;
     JOptionPane.showMessageDialog( 
       null,"Nettoeinzelpreis: " + nEinzelpreis
       +"Gesamtpreis: " + Gesamtpreis     
       +"Mehrwertsteuersatz: " + MWST
       +"Mehrwersteuerbetrag: " + MWSTBetrag
       +"Bruttobetrag: " + BruttoVKPreis +'\u00b2');
    }
  }
}   

Nicht wundern bin noch ein blutiger Anfänger und sehe da einfach nicht was das Problem ist warum das Ergebnis nicht angezeigt wird.
Freue mich auf eine Antwort und möglicherweise ein paar hilfreiche Tipps die einem Anfänger helfen könnten :slight_smile:

Mit Freundlichen Grüßen

Erst einmal herzlich willkommen, und für Code bitte [****java]-Tags benutzen.

switch ("Warengruppe") ist sinnlos, es testet auf einen fixen String, und keiner der 4 Fälle wird da passen. Heißt, in MWST wird weiter 0.0 stehen.

Die Rechnung mit der MwSt ist auch falsch, brutto ergibt sich aus Gesamtpreis * (1 + MWST/100)

der ganze Teil ab
BruttoVKPreis=Gesamtpreis*MWST;
ist Teil des letzten case -Blocks.

Du solltest die erste schließende geschweifte Klammer danach vor diese Zeile verschieben.

Außerdem musst du als letzte Anweisung in jedem case-Block ein break; einfügen, weil sonst auch der folgende case-Block ausgeführt wird.

und in das switch ein literalen Wert zu schreiben (der sich also nie ändern wird) ist ziehmlich sinnfrei. Da gehört eine Variable hin.

bye
TT

Mal die minimalen Änderung, um das lauffähig und halbwegs standardkonform (Variablen erst deklarieren, wenn man sie braucht, Variablen immer klein…) zu bekommen. Als Bonus noch der Trick, wie man Dialogausgaben mehrzeilig bekommt…

import javax.swing.*;

public class BruttoVKPreisBerechnen {


    public static void main(String[] args) {
        String eingabe = JOptionPane.showInputDialog("Geben Sie die Artikelzahl ein: ");
        int anzahl = Integer.parseInt(eingabe);

        eingabe = JOptionPane.showInputDialog("Geben Sie den Nettoeinzelpreis ein: ");
        double einzelpreis = Double.parseDouble(eingabe);

        eingabe = JOptionPane.showInputDialog("Geben Sie die Warengruppe [1..4] ein: ");
        int warengruppe = Integer.parseInt(eingabe);

        double gesamtpreis = einzelpreis * anzahl;

        double mwst = 0.0;
        switch (warengruppe) {
            case 1:
                mwst = 3.5;
                break;
            case 2:
                mwst = 7.0;
                break;
            case 3:
                mwst = 10.5;
                break;
            case 4:
                mwst = 19.0;
                break;
        }

        double mwstBetrag = gesamtpreis * mwst / 100.0;
        double bruttoVKPreis = gesamtpreis + mwstBetrag;
        JOptionPane.showMessageDialog(
                null, "<html>Nettoeinzelpreis: " + einzelpreis
                        + "<br>Gesamtpreis: " + gesamtpreis
                        + "<br>Mehrwertsteuersatz: " + mwst
                        + "<br>Mehrwersteuerbetrag: " + mwstBetrag
                        + "<br>Bruttobetrag: " + bruttoVKPreis + "€</html>");
    }
}

Dankeschön leute für die schnelle Antwort:) Werde mir das alles nochmal inruhe durchlesen wenn ich wieder Internet an meinem Computer habe muss vom Handy aus schreiben… da kann ich wenigstens auch die Sachen ausprobieren und dadurch lernen :smiley:

  • müsste es nicht Artikelanzahl heißen?

  • wird die MwSt in EDV-Systemen nicht mit 1.035, 1.07, 1.105 und 1.19 anstatt 3.5, 7.0, 10.5 und 19.0 angegeben?

  • wie müsste ich die MwSt in Rechnungen auf Papier in Prüfungen schreiben?

  • (technisch), double mwstBetrag = gesamtpreis * mwst / 100.0; ist confusing indentation/intention, besser so: double mwstBetrag = mwst / 100.0 * gesamtpreis;.

Wenn man den MwSt-Betrag sowieso separat ausweisen muss, spielt das wirklich keine Rolle. 1.19 spiegelt eher die technische Sicht, 19.0 eher die fachliche Sicht (der üblichen Prozentangabe) wider.

  • (technisch), double mwstBetrag = gesamtpreis * mwst / 100.0; ist confusing indentation/intention, besser so: double mwstBetrag = mwst / 100.0 * gesamtpreis;.

Die Berechnung ist strenggenommen reihenfolgeabhängig:

System.out.println(1234567.45*456.78/78.9);
// 7147347.526121672
System.out.println(1234567.45/78.9*456.78);
// 7147347.526121671

Allerdings ist das hier ebenfalls nicht relevant.

Welches wäre denn genauer? Aber darauf wollte ich nicht abzielen. Sondern Lesbarkeit erhöhen und Verwirrung prophylaxe. :smiley:

Hmm Geschmackssache, ich fand

double mwstBetrag = gesamtpreis * mwst / 100.0;

(minimal) schneller einleuchtend als

double mwstBetrag = mwst / 100.0 * gesamtpreis;

Nein, worauf es mir ankommt:

double mwstBetrag = gesamtpreis * mwst / 100.0;

könnte verwechselt werden mit:

double mwstBetrag = (gesamtpreis * (mwst / 100.0));

GERADE ANFÄNGER KÖNNTEN DAS ANNEHMEN SO!

Das soll auch kein Getrolle sein.

Aber beides liefert doch das gleiche Ergebnis???

Ich habe mir angewöhnt, die Multiplikationen nach vorne und die Divisionen nach hinten zu nehmen, weil a / b * c als a / (b * c) aufgefasst werden könnte, und das ist dann wirklich falsch.

[QUOTE=Crian]Hmm Geschmackssache, ich fand…

[/QUOTE]

Hmm. In der Tat, aber … was heißt „Prozent“? „Von hundert“, oder auch „Hundertstel“.

double mwstBetrag = (gesamtpreis / 100.0) * mwst;
//                  (     ein Prozent   ) * wieOftAuchImmer

So langsam dürften wir aber alle Permutationen durch haben :smiley: