Taschenrechner

seymenxkaya

Aktives Mitglied
Ich bin zurzeit dabei einen Taschenrechner zu programmieren, welcher soweit funktioniert, doch man kann nur 2 Werte eingeben. Da dies mir zu wenig ist habe ich meinen Lehrer gefragt, wie ich mehrere Werte eingeben könnte. Er meinte mit String split. So nun meine Frage: Wie genau soll das funktionieren? Ich meine ich muss ja irgendwie ein Array haben, aber da muss man dann ja auch eine Anzahl an Werten angeben oder nicht?
Java:
JButton ButtonGleich = new JButton("=");
        ButtonGleich.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
            
                zweiteZahl = Double.parseDouble(Textfeld.getText());
                
                if (operator == "+") {
                    ergebnis = ersteZahl + zweiteZahl;
                    antwort = String.format("%.2f",ergebnis);
                    Textfeld.setText(antwort);
                }
                
                else if (operator == "-") {
                    ergebnis = ersteZahl - zweiteZahl;
                    antwort = String.format("%.2f",ergebnis);
                    Textfeld.setText(antwort);
                }
                else if (operator == "*") {
                    ergebnis = ersteZahl * zweiteZahl;
                    antwort = String.format("%.2f",ergebnis);
                    Textfeld.setText(antwort);
                }
                else if (operator == "/") {
                    ergebnis = ersteZahl / zweiteZahl;
                    antwort = String.format("%.2f",ergebnis);
                    Textfeld.setText(antwort);
                }

            }
        });
 

seymenxkaya

Aktives Mitglied
Was heißt, man kann nur 2 Werte eingeben?!?
Also ich habe den Taschenrechner zusammen gebastelt mit Ecplise und es so programmiert, dass es 2 Variablen gibt. Diese sind die eingegeben Werte, z.B 10 und 5. So nun kann ich aber nicht mehr eintippen. Wie kann ich das Programm dazu kriegen, dass ich mehr Werte eingeben kann und nicht sofort ein Fehler auftritt?
 

mihe7

Top Contributor
Beispiel: Du setzt das Ergebnis in das erste Feld und leerst das zweite, damit Du dort weitere Werte angeben kannst.
 
K

kneitzel

Gast
Also String.split ist dazu da, einen String zu zerlegen. Das brauchst Du aber nur, wenn Du einen String aufbauen möchtest, aber das ist erst einmal nicht wirklich zielführend, denn Du hast ja schon Zahlen und Token getrennt.

Was Du also machen könntest, wäre die ganzen eingegebenen Werte mit den Operationen zu speichern. So gespeicherte Werte nennt man oft (z.B. beim Compilerbau) Token. Also hätte man eine Oberklasse Token.

Diese Token können dann sein:
- Zahlen
- Operationen (Diese haben dann ein oder mehrere untergeordnete Elemente.

Die Eingabe einer Zahl erfolgt so wie bisher. Die gemerkte Zahl gibt aber nun keine Zahl mehr aus, sondern eine Art Baumstruktur mit Token (=Eingaben).
Also Aufbau kann dann sein:
Du gibst eine Zahl ein wie bisher.
Wenn Du einen Operator drückst (+ = - / *), dann wird geschaut, was du bisher hattest:
z.B. Token-Tree war leer, Operator mit 2 Operanden wurden gedrückt:
Gemerkt ist dann ein Operator Token und die Zahl wird zu dem ersten Operanden.
Hier wird deutlich: Du musst Dir einen Arbeitszeiger merken - denn nun muss ja der zweite Operand eingegeben werden.

Damit haben wir auch schon den nächsten Zustand.
Operator <-- Arbeits Merker!
-> 1.Operand: 123
-> 2. Operand: null
Wenn nun eine Zahl eingegeben wird und das "=" gedrückt wurde, dann wird die Zahl zu dem zweiten Operanden und beim gemerkten Zustand wird dann calculateValue() aufgerufen (Eine Funktion, die jedes Token haben muss ...).

Was, wenn statt einem = ein Operand aufgerufen wurde?
Wir erstellen erst einmal den Token und schauen dann, wo wir diesen Hinzufügen müssen.
Hier kommt nun die Reihenfolge der Operationen ins Spiel. Punkt vor Strichrechnung:
- Ist die erste Operation vorrangig auszuführen (Z.B. hatten wir ein "5" "*" und nun kommt ein "3" "+"), dann ist ja erst die 5*3 zu berechnen. Die Zahl kommt also in den zweiten Operanden, die bisherige Operation kommt aber dann in den 1. Operanden. Wir haben also sowas wie:
Operator (+) <-- Arbeits Merker!
-> 1. Operand: Operator (*)
----> 1. Operand: 5
----> 2. Operand: 3
-> 2. Operand: null

- Ist die erste Operation gleichwertig oder nachrangig, dann bleibt der Baum wie bisher und wir füllen in den 2. Operand den neu erstellten Operator Token.
Beispiel hier wäre dann "5" "+" was
Operator (+) <-- Arbeits Merker!
-> 1. Operand: 5
-> 2. Operand: null
ergab und nun kommt das "+" "3" oder "*" "3".
Operator (+)
-> 1. Operand: 5
-> 2. Operand: Operator (+ oder *) <-- Arbeits Merker!
----> 1. Operand: 3
----> 2. Operand: null

Das sieht erst einmal recht komplex aus, aber so komplex ist es nicht wirklich. Man kann dies auf einem Zettel durchspielen und dann erkennt man, wie der Baum aufgebaut werden kann / muss.

Für so eine Lösung braucht man Wissen zu Objektorientierter Entwicklung aber kein String.split :)
 

mihe7

Top Contributor
Die Frage wäre erst einmal, was Du genau haben willst: einen einfachen Taschenrechner, bei dem Zahlen und Operatoren mit Buttons "eingegeben" werden und bei dem das Ergebnis der vorherigen Operation gleich angezeigt wird?

Oder brauchst Du einen Taschenrechner, der komplette Ausdrücke in Infix-Notation inkl. Klammerung auswerten kann?
 

seymenxkaya

Aktives Mitglied
Die Frage wäre erst einmal, was Du genau haben willst: einen einfachen Taschenrechner, bei dem Zahlen und Operatoren mit Buttons "eingegeben" werden und bei dem das Ergebnis der vorherigen Operation gleich angezeigt wird?

Oder brauchst Du einen Taschenrechner, der komplette Ausdrücke in Infix-Notation inkl. Klammerung auswerten kann?

Einen einfachen Taschenrechner mit Buttons. Der ist ja schon fertig, allerdings kann ich wie gesagt nur 2 Werte zusammen berechnen.
 

seymenxkaya

Aktives Mitglied
Ich habe mich mal erneut ran versucht, dabei ist dies raus gekommen:
Java:
 while (a == true) {   
    System.out.println("Gib eine Zahl ein"); //erste Zahl eingeben
            eingabe1 = scan.nextDouble();

            
            System.out.println("Gib ein Operator ein"); // Operator eingeben
            operator = scan.nextLine();
    
             if (operator.equals("=")) {
                     System.out.println("Dein Ergebnis beträgt " + ergebnis);
                     a = false;
                 }
            
            else if (operator.equals("+")) { // wenn + eingegeben wurde addiere eingabe1 und eingabe2 zusammen
            
                System.out.println("Gib eine Zahl ein"); //zweite Zahl eingeben
                eingabe2 = scan.nextDouble();
                ergebnis = eingabe1+eingabe2;
                eingabe1 = 0.0;
                }
    
            else if (operator.equals("-")) { // wenn - eingegeben wurde subtrahiere eingabe1 und eingabe2 zusammen
        
                System.out.println("Gib eine Zahl ein"); //zweite Zahl eingeben
                eingabe2 = scan.nextDouble();
                ergebnis = eingabe1-eingabe2;
                eingabe1 = 0.0;
                }
    
            else if (operator.equals("*")) { // wenn * eingegeben wurde multipliziere eingabe1 und eingabe2 zusammen
    
                System.out.println("Gib eine Zahl ein"); //zweite Zahl eingeben
                eingabe2 = scan.nextDouble();
                ergebnis = eingabe1*eingabe2;
                eingabe1 = 0.0;
                }

            else if (operator.equals("/")) { // wenn / eingegeben wurde teile eingabe1 durch eingabe2
    
                System.out.println("Gib eine Zahl ein"); //zweite Zahl eingeben
                eingabe2 = scan.nextDouble();
                ergebnis = eingabe1/eingabe2;
                eingabe1 = 0.0;
            }
            
            else {
                System.out.println("Fehler");
                System.exit(1);
            }
Jedoch kommt in der Konsole dies raus:
Java:
Gib eine Zahl ein
2
Gib ein Operator ein
Fehler
Ich gebe eine Zahl ein und sofort kommt die Fehler Meldung, aber warum?
Davor hatte ich es anders implementiert gehabt ohne while Schleife, jedoch kam da das selbe bei rum :/ .
Java:
System.out.println("Gib eine Zahl ein"); //erste Zahl eingeben
            eingabe1 = scan.nextDouble();

            
            System.out.println("Gib ein Operator ein"); // Operator eingeben
            operator = scan.nextLine();   
    
            if (operator.equals("+")) { // wenn + eingegeben wurde addiere eingabe1 und eingabe2 zusammen
            
                System.out.println("Gib eine Zahl ein"); //zweite Zahl eingeben
                eingabe2 = scan.nextDouble();
                ergebnis = eingabe1+eingabe2;
                eingabe1 = 0.0;
                }
    
            else if (operator.equals("-")) { // wenn - eingegeben wurde subtrahiere eingabe1 und eingabe2 zusammen
        
                System.out.println("Gib eine Zahl ein"); //zweite Zahl eingeben
                eingabe2 = scan.nextDouble();
                ergebnis = eingabe1-eingabe2;
                eingabe1 = 0.0;
                }
    
            else if (operator.equals("*")) { // wenn * eingegeben wurde multipliziere eingabe1 und eingabe2 zusammen
    
                System.out.println("Gib eine Zahl ein"); //zweite Zahl eingeben
                eingabe2 = scan.nextDouble();
                ergebnis = eingabe1*eingabe2;
                eingabe1 = 0.0;
                }

            else if (operator.equals("/")) { // wenn / eingegeben wurde teile eingabe1 durch eingabe2
    
                System.out.println("Gib eine Zahl ein"); //zweite Zahl eingeben
                eingabe2 = scan.nextDouble();
                ergebnis = eingabe1/eingabe2;
                eingabe1 = 0.0;
                }
                

            System.out.println("Gib ein Operator ein"); // Operator eingeben
            operator = scan.nextLine();
    
         if (operator.equals("=")) {
                 System.out.println("Dein Ergebnis beträgt " + ergebnis);
             }
         else if (operator.equals("+")) {
                 System.out.println("Gib eine Zahl ein");
                 eingabe1 = scan.nextDouble();
                 ergebnis = ergebnis + eingabe1;
                 eingabe1 = 0.0;
             }

         else if (operator.equals("-")) {
                 System.out.println("Gib eine Zahl ein");
                 eingabe1 = scan.nextDouble();
                 ergebnis = ergebnis - eingabe1;
                 eingabe1 = 0.0;
             }

         else if (operator.equals("*")) {
                 System.out.println("Gib eine Zahl ein");
                 eingabe1 = scan.nextDouble();
                 ergebnis = ergebnis * eingabe1;
                 eingabe1 = 0.0;
         }

         else if (operator.equals("/")) {
                 System.out.println("Gib eine Zahl ein");
                 eingabe1 = scan.nextDouble();
                 ergebnis = ergebnis / eingabe1;
                 eingabe1 = 0.0;
                    
                
             }
Hier kann ich 2 Zahlen eingeben, doch wird nach der 1. Zahl sofort nach dem 2. Operator gefragt, welcher erst nach der 2. Zahl befragt werden soll.
 

mihe7

Top Contributor
Einfach mit nextLine() das Zeilenende entfernen.

Java:
            eingabe1 = scan.nextDouble();
            scan.nextLine(); // Rest der Zeile (Zeilenende) lesen

            System.out.println("Gib ein Operator ein"); // Operator eingeben
            operator = scan.nextLine();
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
R Operatoren Rechenoperation verwenden für Taschenrechner. Java Basics - Anfänger-Themen 32
S while Schleife Taschenrechner Java Basics - Anfänger-Themen 1
J Taschenrechner mit mehr als 2 Zahlen. Java Basics - Anfänger-Themen 18
R Einfacher Taschenrechner mit Eclipse Java Basics - Anfänger-Themen 3
M Einfacher Taschenrechner Java Basics - Anfänger-Themen 2
Fiedelbambu Prüfen von Komma stelle beim Taschenrechner Java Basics - Anfänger-Themen 5
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
Y Taschenrechner programmieren Java Basics - Anfänger-Themen 3
G Taschenrechner ergibt Fehler in if-Abfrage Java Basics - Anfänger-Themen 6
K Erste Schritte "Taschenrechner" zeigt keine Komma Zahlen an. Java Basics - Anfänger-Themen 8
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
E JavaFX Taschenrechner Eingabe im Textfield beschränken Java Basics - Anfänger-Themen 2
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
C Taschenrechner (switch) in Taschenrechner mit Methoden umwandeln Java Basics - Anfänger-Themen 115
W Taschenrechner mit Switch case Java Basics - Anfänger-Themen 4
W Taschenrechner Java Basics - Anfänger-Themen 11
A Taschenrechner mit Gui erstellen Java Basics - Anfänger-Themen 9
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
P Taschenrechner mit unendlich vielen Eingabemöglichkeiten Java Basics - Anfänger-Themen 1
V Erste Schritte Taschenrechner mit beliebig vielen Zahlen Java Basics - Anfänger-Themen 5
P Taschenrechner Text übertragung Java Basics - Anfänger-Themen 3
S Compiler-Fehler Basic- Taschenrechner/ Fehler Java Basics - Anfänger-Themen 8
S Basic- Taschenrechner? Java Basics - Anfänger-Themen 7
P Hilfe bei Java Taschenrechner Java Basics - Anfänger-Themen 25
F Erste Schritte Frage zu simplem Taschenrechner(switch) Java Basics - Anfänger-Themen 16
L Mein Taschenrechner lässt sich plötzlich nicht mehr öffnen Java Basics - Anfänger-Themen 5
S Taschenrechner hilfe! Java Basics - Anfänger-Themen 17
H Java Taschenrechner Java Basics - Anfänger-Themen 4
R Variablen Taschenrechner mit Komfortfunktionen Java Basics - Anfänger-Themen 2
J RPN Taschenrechner - keine Lösung!! Java Basics - Anfänger-Themen 84
M Java Taschenrechner (if-else) Java Basics - Anfänger-Themen 11
L Taschenrechner mit switch und while funktioniert noch nicht richtig Java Basics - Anfänger-Themen 22
Q simpler Taschenrechner Java Basics - Anfänger-Themen 34
R Taschenrechner NullPointerException Java Basics - Anfänger-Themen 1
R Variablen Weitergehenderr Taschenrechner Java Basics - Anfänger-Themen 4
F Taschenrechner "Error loading class..." Java Basics - Anfänger-Themen 5
M Java Taschenrechner Programmieren Java Basics - Anfänger-Themen 12
P Erste Schritte Taschenrechner mit if-else Anweisung Java Basics - Anfänger-Themen 6
G Taschenrechner gibt nur 0.0 aus Java Basics - Anfänger-Themen 8
A Taschenrechner programmieren Java Basics - Anfänger-Themen 21
Z Java Taschenrechner Java Basics - Anfänger-Themen 6
J Kleiner Taschenrechner! Anfänger braucht Hilfe :( Java Basics - Anfänger-Themen 2
C Taschenrechner in Java Java Basics - Anfänger-Themen 6
J Erste Schritte Java CMD Taschenrechner mit Parametern! Java Basics - Anfänger-Themen 16
J Taschenrechner: Probleme Java Basics - Anfänger-Themen 5
E Taschenrechner problem! Ich komme nicht voran Java Basics - Anfänger-Themen 18
R Erste Schritte Taschenrechner mit Schleife Java Basics - Anfänger-Themen 24
Lord.Djerun (Taschenrechner Netbeans) Komma nur einmal schreiben & 0 ersetzen Java Basics - Anfänger-Themen 1
Z Taschenrechner - Additions/Substraktions/Multiplikations/Divionsketten! Java Basics - Anfänger-Themen 4
D Taschenrechner Frage Java Basics - Anfänger-Themen 12
Z Sehr simpler Taschenrechner - Hilfe! Java Basics - Anfänger-Themen 10
Z Taschenrechner - Wie addiere,multipliziere und subtrahiere ich? Java Basics - Anfänger-Themen 6
D kleiner Taschenrechner mit switch fehlerhaft Java Basics - Anfänger-Themen 1
K Taschenrechner im GUI Java Basics - Anfänger-Themen 2
P Taschenrechner, operatoren Java Basics - Anfänger-Themen 4
D Simpler Taschenrechner Java Basics - Anfänger-Themen 6
A Anfänger Taschenrechner Frage Java Basics - Anfänger-Themen 14
R Erste Schritte Taschenrechner - Punkt-vor-Strich Rechnung Java Basics - Anfänger-Themen 1
S Operatoren Taschenrechner Ergebnis ausgeben Java Basics - Anfänger-Themen 7
A Taschenrechner zeigt Error Java Basics - Anfänger-Themen 7
J Taschenrechner Funktion Java Basics - Anfänger-Themen 18
M Taschenrechner fertigstellung Java Basics - Anfänger-Themen 1
N Methoden Taschenrechner Java Basics - Anfänger-Themen 2
F z = input.nextChar(); PROBLEM Taschenrechner Java Basics - Anfänger-Themen 7
J Scanner Taschenrechner? Java Basics - Anfänger-Themen 7
J Variablen Rechenzeichen und Zahlen verknüpfen für einen Taschenrechner Java Basics - Anfänger-Themen 17
B Klassen Java Taschenrechner mit Klassen und Methoden Java Basics - Anfänger-Themen 12
B Erste Schritte Brauche Hilfe bei einem Java-Taschenrechner Java Basics - Anfänger-Themen 11
R Methoden Taschenrechner Java Basics - Anfänger-Themen 4
P Taschenrechner , IF-Abfrage Java Basics - Anfänger-Themen 12
I Taschenrechner - Methoden implementieren Java Basics - Anfänger-Themen 5
I Java Starthilfe (Taschenrechner) Java Basics - Anfänger-Themen 7
J Taschenrechner Problemchen Java Basics - Anfänger-Themen 3
D Erste Schritte Taschenrechner Java Basics - Anfänger-Themen 11
K taschenrechner - Fehler beim Kürzen eines Bruches finden Java Basics - Anfänger-Themen 20
J Taschenrechner Punkt vor Strich Java Basics - Anfänger-Themen 9
A Taschenrechner programmieren Java Basics - Anfänger-Themen 5
M Ausklappbares Fenster bei grafischem Taschenrechner Java Basics - Anfänger-Themen 2
M Dividieren bei Grafischem Taschenrechner klappt nicht Java Basics - Anfänger-Themen 2
N Taschenrechner mit Unterprogra Java Basics - Anfänger-Themen 6
C Taschenrechner Java Basics - Anfänger-Themen 12
Z Taschenrechner programmieren Java Basics - Anfänger-Themen 5
E Erste Schritte Taschenrechner Java Basics - Anfänger-Themen 8
K Taschenrechner Java Basics - Anfänger-Themen 25
J Textfeld für Taschenrechner Java Basics - Anfänger-Themen 3
D Taschenrechner Java Basics - Anfänger-Themen 28
A Taschenrechner-GUI mit BorderLayout? Java Basics - Anfänger-Themen 6
W [PROJEKT] Simpler grafischer Taschenrechner Java Basics - Anfänger-Themen 8
M Taschenrechner mit JApplet Java Basics - Anfänger-Themen 26
J Grafischen Taschenrechner programmieren - Frage dazu Java Basics - Anfänger-Themen 12
W Taschenrechner Java Basics - Anfänger-Themen 2
T Tasten vom Taschenrechner? Java Basics - Anfänger-Themen 3
S Datentypen Taschenrechner Java Basics - Anfänger-Themen 13
J Taschenrechner Java Basics - Anfänger-Themen 5
J Taschenrechner Java Basics - Anfänger-Themen 9
M While bei einem Taschenrechner Java Basics - Anfänger-Themen 5
F Datentypen Ganz simpler Taschenrechner mit switch Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben