Wie findet ihr meinen Java Taschenrechner?

7 Antworten

Hallo stupidity430,

Du fragst nach meiner ehrlichen Meinung, hier ist meine ehrliche, persönliche Meinung. Der Code ist für einen Java-Anfänger, bzw. einen Programmieranfänger hinnehmbar. Einen Blumentopf gewinnt man damit natürlich nicht. Als Übung ist es ein Anfang und evtl. eine Basis um weitere Übungen durchzuführen.

Bei Taschenrechner denke ich natürlich nicht an einen Konsolenapplikation, sondern an eine UI, die einen Taschenrechner nachbildet. Das wäre vielleicht als nächste Übung ganz nett.

Zum Code und zur Funktionalität selbst.

  • Der Nutzer wird nach erfolgter Berechnung gefragt ob er nochmal rechnen möchte und kann dies tun. Danach kann er jedoch nicht nochmals Rechnen, da das Programm beendet wird. Was ist das für ein seltsames Verhalten?
  • Die Multiplikation ist nicht erreichbar (auch bei Leereingabe nicht)
  • Du bist noch in der static-Hölle. Keine Objektorientierung, aber schön alles statisch. Wobei alles natürlich recht wenig ist.
  • Variablennamen schreibt man klein (z.B. Operationszeichen)
  • Variablennamen sollten Aussagekräftig sein (bool ist zu generisch, wie wäre es mit operationGewaehlt)
  • Methodennamen schreibt man klein
  • Die Methode "Methode" ist sehr schlecht benannt (generische Namen helfen nicht dem Verständnis)
  • Es werden mehrere Scanner erzeugt, warum? Einer reicht doch.
  • Was ist die Aufgabe von Methode? Eine Methode sollte im Idealfall genau eine Aufgabe erfüllen. Deine "Methode" erledigt Eingabe, Ausgabe, Rechenoperation und dazu noch eine Schleife
  • Die Multiplikation fehlt in der Liste der möglichen Rechenoperationen (der Code sieht dies jedoch "halb" vor).
  • Viel zu viele Literale im Code, die sich dazu noch wiederholen (z.B. "Eingabe bestätigt")
  • Du verwendest "nextInt()", aber als Variablentyp "double". Bei Eingabe von einem double Wert kommt es zu einer "InputMismatchException"
  • Allgemein wird bei Eingaben nicht genügend auf Falscheingaben geprüft. ExceptionHandling erfolgt überhaupt nicht.
  • "Ergebnis" wird groß geschrieben. User facing Text sollte korrekt geschrieben werden.

Wahrscheinlich lassen sich noch ein paar Punkte finden, aber das war erstmal das Grobe.

Gruß


NatanInfoPhilo  15.06.2018, 23:00

Du bist teilweise sehr unfreundlich. Das finde ich nicht gut. Deine Punkte sind korrekt.

mfg

NatanInfoPhilo  16.06.2018, 11:37
@MBgamer

"

  • Du bist noch in der static-Hölle. Keine Objektorientierung, aber schön alles statisch. Wobei alles natürlich recht wenig ist.

"

AldoradoXYZ  16.06.2018, 15:08
@NatanInfoPhilo

Wenn das schon unfreundlich ist, ok, dann war der Post unfreundlich.

"static-Hölle" ist einfach ein Begriff und meiner Meinung nach auch nicht unpassend. Ich behaupte mal, dass sehr, sehr viele Anfänger, die mit Java einsteigen irgendwann mal Bekanntschaft mit der static-Hölle machen. Mich selbst übrigens eingeschlossen.

Gruß

NatanInfoPhilo  16.06.2018, 15:12
@AldoradoXYZ

Das ist unfreundlich, das aber nicht. "aber schön alles statisch. Wobei alles natürlich recht wenig ist."

AldoradoXYZ  16.06.2018, 15:15
@NatanInfoPhilo

Dass alles statisch ist, ist eine Feststellung. "Schön" ist evtl. unangebracht; aber bitte, wie sanft muss es denn sein?

Wobei alles natürlich recht wenig ist.

Das "recht wenig" war nicht nicht negativ gemeint. Da es wenig ist und nur eine statische Methode überhaupt existiert, ist die Schlussfolgerung, dass stupidity430 alles statisch macht natürlich einzuschränken. Aus dem kurzen Code kann man nicht ablesen ob der Nutzer das generell so macht. Der Verdacht lag nur nahe.

Gruß

stupidity430 
Beitragsersteller
 15.06.2018, 15:36

Ich danke dir für deine Kritik, aber ich bin noch ein Anfänger. Ich finde das alles total spannend, aber mache es erst seit zwei Wochen.

AldoradoXYZ  15.06.2018, 15:38
@stupidity430

Ich sagte ja, für einen Anfänger hinnehmbar. Ich würde das auch nicht negativ verstehen, gibt halt viel zu lernen.

Viel Spaß dabei

Gruß

regex9  15.06.2018, 17:00
@stupidity430

Als Ergänzung zu oben:

1) Schließe die Verbindung des Scanners zum Eingabestream, wenn du mit ihm nicht mehr liest.

2) Formatiere deinen Code, wenn du ihn hier postest oder nutze Seiten wie pastebin.com.

Nervig.

Ich mag Programme nicht, die so mitteilsam sind. Und trotzdem das Programm alles kommentiert, wird eine Division durch 0 weder abgefangen, noch beanstandet!

Wenn ich im Taschenrechner 3+4 rechnen will, möchte ich auch 3+4 eingeben und "=" drücken und mich nicht durch zig Dialoge quälen!

Zudem schreibt man "Auswahl" mit "a" vor dem h und "Ergebnis" schreibt man groß.

Also: nein, das ist nichts!

Ist jetzt nichts besonderes. Du könntest die ganzen if Else durch 2 Switch austauschen.
Und die Abfrage ob man nochmal rechnen will würde am Ende der Methode mehr Sinn machen. Dann könnte man es beliebig oft machen und nicht nur 2 mal.
bool == false ist eigentlich auch unschön. Besser wäre !bool


stupidity430 
Beitragsersteller
 15.06.2018, 15:29

OK danke, das war mein Problem. Ich werds mal versuchen!

Kann man machen, muss man aber net. Die if-Abfragen kannste entweder durch switch-Case vereinfachen oder, nur deutlich weniger Code, durch RegEx. Außerdem haste die Schleife in der main-Methode vergessen die Wiederholgungen zulässt.

Die zweite if-Abfrage kannste auch wieder durch switch-Case vereinfachen. Zudem kannste dir die Variable "c" eigentlich sparen. Außerdem sollte man Variablen am Anfang einer Methode deklarieren.

Dann wären da noch die Codeconventions (Variablen klein schreiben, Methodennamen in Camelcase usw.).

http://www.oracle.com/technetwork/java/codeconventions-135099.html

Dann wäre da noch die kleine Problematik, dass du deine Scanner nicht schließt.


Etter  15.06.2018, 20:39

Achja teilen durch 0 sollte eig. auch nicht möglich sein und beim Einlesen der Doubles sollteste drauf achten, dass der Typ auch stimmt.

Bei der Gelegenheit dann noch die Idee, dass du einen Scanner als Parameter übergibst, wenn du eh einen in der main hast.

Das ganze mal so ungefähr:

https://bitbucket.org/snippets/Ettar/4egrAx

Hallo stupidity430 🖐️

Also als erstes bin ich auch noch in Anfänger, verstehe aber deinen Code.

Also fangen wir an:

Du hättest statt a, b und c,

double zahl1 = s.nexInt();
double zahl2 = s.nextInt();
double ergebnis;

machen können.

Das war's xD (Bin halt auch noch Anfänger xD)

Woher ich das weiß:eigene Erfahrung