Erste Schritte Feedback zum ersten Anfängerprogramm

Jack84

Mitglied
Hallo alle miteinander :)

ich habe beschlossen Java programmieren zu lernen und bin gerade dabei das bisher gelernte an einem einfach Beispiel - einem Taschenrechner - umzusetzen. Ich würde mich sehr freuen wenn jemand einen Blick drauf werfen könnte und mir anschließend etwas Feedback gibt z. B. was gut und was weniger gut ist. Vielen Dank dafür schon mal im Voraus.

Ach ja, die innere Klasse hat nichts weiter zu bedeuten. Ich wollte es einfach mal ausprobieren.

Java:
package calc.main;

import java.util.Scanner;

public class tr {

    public static void main(String[] args) {

        new Rechner();
    }

}

class Rechner{
    private double erg;
    private String operator;
    Scanner eingabe = new Scanner(System.in);

    Rechner() {
        zahlEingeben();
    }
  
    private void zahlEingeben() {
        System.out.print("Zahl eingeben: ");
        erg = eingabe.nextDouble();
        operatorEingeben();
    }
  
    private void operatorEingeben() {
        System.out.print("Rechenoperator: ");
        operator = eingabe.next();
        calculate();
    }
  
    private void calculate() {
        switch(operator) {
        case "+":
            addiere(zweiteZahl());
            break;
        case "-":
            subtr(zweiteZahl());
            break;
        case "*":
            multpl(zweiteZahl());
            break;
        case "/":
            divid(zweiteZahl());
            break;
        case "=":
            System.out.println("Ergebnis: -> " + erg);
            break;
        default:
            System.out.println("fehler");
        }
        System.out.println("Ergebnis: -> " + erg);
        operatorEingeben();
    }
  
    private double zweiteZahl() {
        System.out.print("nächste Zahl eingeben: ");
        return eingabe.nextDouble();
    }
  
    private void addiere(double zahl) {
        erg = erg + zahl;
    }
  
    private void subtr(double zahl) {
        erg = erg - zahl;
    }
  
    private void multpl(double zahl) {
        erg = erg * zahl;
    }
  
    private void divid(double zahl) {
        erg = erg / zahl;
    }  
}
 

krgewb

Top Contributor
Das ist der Ablauf der Eingabe:

Zahl
Rechenoperator
nächste Zahl
Rechenoperator
nächste Zahl
Rechenoperator
nächste Zahl
...

Ich habe also nie wieder die Möglichkeit, die erste Zahl einzugeben.
 

temi

Top Contributor
+ ordentlich formatierter Quelltext
+ Aufteilung auf verschiedene Funktionen
+ ganz gute Namensgebung

- Ablauf startet im Konstruktor des Rechners
- Die Funktionen "zahlEingeben" und "operatorEingeben" und auch "calculate" machen mehr als der Name vorgibt, tatsächlich steckt die gesamte Ablauflogik darin verteilt.
- Verteilte Ablauflogik. Besser wäre es dem Rechner eine Funktion z.B. "start()" zu spendieren und dort den Ablauf in einer Schleife zu realisieren.
 

Jack84

Mitglied
Erst einmal vielen Dank für euer Feedback. Ich hätte da jetzt aber ein paar Rückfragen dazu:

@krgewb
Dein Einwand war durchaus berechtigt. So wie das Programm jetzt aufgebaut ist, lässt es sich nicht von neuem starten. Es muss also jedes mal beendet und anschließend neu gestartet werden. Das ist eine Funktion die ich noch einbauen muss.

@temi
Warum ist es schlecht Programmbeginn aus dem Konstruktor heraus zu starten? Und wie würde so eine Start Methode aussehen? Würde diese nicht ebenfalls "nur" die Methode zahlEingeben() enthalten? Anschließend rufen sich die Methoden doch gegenseitig auf. Oder hab ich das missverstanden?
 

temi

Top Contributor
Warum ist es schlecht Programmbeginn aus dem Konstruktor heraus zu starten?
Ich halte das nicht für günstig, weil der Sinn des Konstruktors, wie der Name schon sagt, die Erzeugung eines Objektes ist. Für den Anwender der Klasse ist es dann überraschend, wenn damit gleich das Programm gestartet wird.
Java:
public static void main(String[] args) {
        Rechner rechner = new Rechner();
        rechner.start();
}

Würde diese nicht ebenfalls "nur" die Methode zahlEingeben() enthalten? Anschließend rufen sich die Methoden doch gegenseitig auf.
In diesem Fall würde die Methode zahlEingeben() genügen, aber ich finde deine Lösung nicht gelungen, weil die Methoden mehr tun, als ihr Name verspricht und durch diese Verschachtelung, der Code nicht sehr eingängig ist.
Besser wäre z.B. etwas in dieser Art:
Java:
public void start(){
     ersteZahlEingeben();
     while(operatorEingeben()){
          weitereZahlEingeben();
     }
     ergebnis();
}
 

Jack84

Mitglied
Nochmals vielen Dank für das Feedback. Ich möchte als nächstes einen grafischen Taschenrechner basteln und da würde ich versuchen deine Vorschläge umzusetzen. :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
6 Best Practice Feedback zu Service / JUnit Tests Java Basics - Anfänger-Themen 3
Vivien Bitte um Optimierungsvorschläge / Verbesserungsvorschläge / allgemeines Feedback Java Basics - Anfänger-Themen 8
Spencer Reid Feedback zu kleinem Spiel Java Basics - Anfänger-Themen 4
T Erste Schritte Feedback erwünscht Java Basics - Anfänger-Themen 2
A Feedback zum Spiel Java Basics - Anfänger-Themen 5
C Bitte kurzes Feedback - JavaVersionen Java Basics - Anfänger-Themen 6
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
M Stream mit den ersten n natürlichen Zahlen Java Basics - Anfänger-Themen 4
H Erste Schritte Warum misslingt die Auswertung des ersten Aufrufparameters? Java Basics - Anfänger-Themen 4
J Mein Programm läuft bei der ersten Eingabe nicht mehr weiter, woran liegt das? Java Basics - Anfänger-Themen 6
padde479 Array Multiplikation der ersten n Zahlen Java Basics - Anfänger-Themen 7
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
M Ersten Index von Array bestimmen Java Basics - Anfänger-Themen 14
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
KogoroMori21 Vorbereitung auf die Programmieren Klausur vom ersten Semester Java Basics - Anfänger-Themen 4
1 Erste Schritte Was denkt ihr über eines meiner ersten Javaprogramme? Java Basics - Anfänger-Themen 2
H Ersten Zug bestimmen Java Basics - Anfänger-Themen 12
Java The Hutt Primzahlen - die ersten 100 Java Basics - Anfänger-Themen 17
M JComboBox ersten Eintrag leerlassen bzw. Platzhalter Java Basics - Anfänger-Themen 1
Z Ersten Buchstaben eines Elements eines String-Arrays auslesen Java Basics - Anfänger-Themen 5
M Methoden while liefert nur den ersten Datensatz Java Basics - Anfänger-Themen 12
C Entfernen des ersten String-Elements Java Basics - Anfänger-Themen 6
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
K Frage zu meinem ersten Programm Java Basics - Anfänger-Themen 5
K OOP Die ersten Schritte bei der Programierung Java Basics - Anfänger-Themen 1
S Die ersten vier perfekte Zahlen. Java Basics - Anfänger-Themen 30
Z Meine ersten Gehversuche Java Basics - Anfänger-Themen 11
D Problem mit meinem ersten JOptionPane - Fatal exception occurred. Program will exit. Java Basics - Anfänger-Themen 6
M Ausführen des ersten Java Programms Java Basics - Anfänger-Themen 2
S Problem beim ersten compilieren überhaubt Java Basics - Anfänger-Themen 43
T gebe mir den ersten eltern knoten Java Basics - Anfänger-Themen 3
C ArrayIndexOutOfBoundsException bei meinem ersten objektiorientierten Programm Java Basics - Anfänger-Themen 4
X SAX die ersten Schritte Java Basics - Anfänger-Themen 5
T Datenbank automatisch erzeugen beim ersten Start Java Basics - Anfänger-Themen 6
I Problem beim Schreiben eines ersten Programms Java Basics - Anfänger-Themen 3
Semox Ersten Wert eines Intervalls bei Berechnung einschließen Java Basics - Anfänger-Themen 8
B Ersten Eintrag aus einer Map bekommen Java Basics - Anfänger-Themen 11
A Die Werte der ersten beiden markierten Check-Boxen registrieren Java Basics - Anfänger-Themen 11
T zweiter Timer überschreibt den ersten Timer ? Java Basics - Anfänger-Themen 5
D Suche in JList nach dem ersten Buchstaben Java Basics - Anfänger-Themen 2
T zweiter thread killt den ersten Java Basics - Anfänger-Themen 2
T Ersten Buchstaben in einem Wort groß schreiben. Java Basics - Anfänger-Themen 6
L beim ersten compilen schon erste probleme Java Basics - Anfänger-Themen 8
K Programmieren von den ersten 70 Fibonacci-Zahlen Java Basics - Anfänger-Themen 2
S Tomcat Error mit meiner ersten JSF Seite Java Basics - Anfänger-Themen 17
M Problem beim Löschen des ersten Eintrags einer TreeSet Java Basics - Anfänger-Themen 3
G die ersten Zeichen eines Strings Vergleichen mit String Java Basics - Anfänger-Themen 6
G ersten Tag des Monats ermitteln Java Basics - Anfänger-Themen 3
N die ersten drei buchstaben eines Strings ausgeben Java Basics - Anfänger-Themen 2
J Überprüfung ersten Zeichens Java Basics - Anfänger-Themen 7
L Probleme beim ersten JavaProgramm! Java Basics - Anfänger-Themen 4
M meine ersten versuche Java Basics - Anfänger-Themen 8
N Kleines Problem mit meiner ersten Klasse Java Basics - Anfänger-Themen 5
S ersten schritte in Java lernen! Java Basics - Anfänger-Themen 3
thE_29 Vor dem ersten Posten bitte lesen! Java Basics - Anfänger-Themen 1
L Kompletter Neuling: Hilfe beim ersten Java Versuchen Java Basics - Anfänger-Themen 12
Z Verständnisfrage Anfängerprogramm Java Basics - Anfänger-Themen 0
H Erste Schritte Problem bei Anfängerprogramm Java Basics - Anfänger-Themen 5
J Probleme bei for-Schleife (anfängerprogramm) Java Basics - Anfänger-Themen 4
F Anfängerprogramm HelloWorld Java Basics - Anfänger-Themen 19
S Hilfe bei einem Java-Anfängerprogramm. Java Basics - Anfänger-Themen 10
J Anfängerprogramm Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben