Java code für Kassenbon verbesserungen?

Seite 1 - (PC, programmieren, Java) Seite 2 - (PC, programmieren, Java) Ergebnis - (PC, programmieren, Java)

5 Antworten

1) Ist es überhaupt notwendig, mit double zu arbeiten? Ist float nicht ausreichend?

2) Gib jedem Bezeichner einen passenden, eindeutigen Namen.

3) Wo schließt du das Scanner-Objekt?

4) String.format wurde bereits vorgeschlagen, mit der Escape Sequenz \t kannst du Zeilenumbrüche in der Ausgabe erzeugen.

System.out.println("Hallo\tdu\tda!");

5) Deine Schleife ist seltsam. In ihr verändert sich sich weder gegeben, noch gesamt. Das heißt, man kann nicht in Raten abzahlen, sondern muss sofort die richtige Summe liefern. Nach und nach zu zahlen wäre für eine Umsetzung doch aber interessanter, findest du nicht?

-----------------------

PS.: Poste Code zukünftig bitte in Textform, dann kann man auch besser darauf eingehen. Wurde hier in Fragen eigentlich auch schon oft geschrieben.

Hallo Pascal,

du könntest den zurückgegebenen Wert mit "String.format("%.2f", zurück);" formatieren.

Und man sollte bei Variablen, Methoden, Klassen niemals "ä,ü,ö" verwenden.

LG,

DerAnswerer


pascalmeister 
Beitragsersteller
 28.12.2017, 20:18

Danke.x)

1

Beim 2. hast du if gegeben > gesamt

es müsste if gegeben >= gesamt sein

da sonst ein Fehler käme wenn gegeben=gesamt


pascalmeister 
Beitragsersteller
 28.12.2017, 21:09

Oh ups danke

0

da mach mal als erstes eine Format-Methode für die Preise (formatPrice, double rein, String raus), und formatiere in der den Preis auf zwei Nachkommastellen und mit deutschem Komma. String.format(..."%10.02d") kann da helfen, z.B.

Und nehme die dann durchgängig bei der Ausgabe mit rein. Dann sieht das besser aus, under Rundungsfehler wird nicht mit ausgegeben. Der ist auch nicht weiter tragisch -- ist so, außer man macht BCD-Arithmetik. Ist aber fortgeschritten und hier unnötig.

Man könnte sich einige Zeilen sparen und den Code nach dem DRY-Prinzip sowohl lesbarer als auch skalierbarer machen, indem man ein Array für die Produkte verwendet. Beispiel:

Object[][] produkte = {
                        {
                           "Kakao",
                           2,
                           2.3,
                           2 * 2.3
                        },
                        {
                           "Wasser",
                           1,
                           1.66,
                           1 * 1.66
                        },
                        // usw...     
};

Dadurch kannst du anschließend Schleifen benutzen statt mehrer if-Abfragen.

Beachte auch die anderen guten Antworten bezüglich der Formatierung des Ergebnisses.

Auf deine andere Frage bezüglich des "komischen Ergebnisses" habe ich nun ebenfalls geantwortet: https://www.gutefrage.net/frage/hilfe-eclipse-kann-nicht-subtrahieren?foundIn=user-profile-question-listing#answer-268254372

Für Übungszwecke ist das Runden ganz in Ordnung, aber bei einem reellen Szenario sollte definitiv BigDecimal für monetäre Berechnungen verwendet werden.


regex9  28.12.2017, 20:46

Ich finde die Object-Array-Variante nicht gut (so klein das Beispiel auch sein mag), denn es geht gegen das Prinzip der Typsicherheit.

Entweder man legt sich eine Klasse an und erzeugt zu dieser ein Array / eine Liste o.ä. oder man krabbelt vorerst weiter auf Knien, bis man so weit ist, solchen Code zusammenzufassen.

1
tavkomann  28.12.2017, 20:58
@regex9

Genau, wenn man schon bei der Objektorientierung angekommen ist, ist eine eigene Klasse natürlich die deutlich bessere Variante.

0