Java Taschenrechner

Zyron

Mitglied
Hallo!

Ich programmiere momentan einen kleinen Java Taschenrechner und wollte fragen, ob es dafür vorgefertigte Methoden gibt, die ich einen String einlesen lassen kann und diese mir dann das Ergebnis ausgeben. Man sollte damit auch Klammer, Potenz, Wurzel, sin, cos und tan ausrechnen können. Meine Google Suche hat leider keine solche Ergebnisse geliefert, da man bei jeder dieser vorgefertigten Klassen immer nur einzelne Sachen ausrechnen konnte.

Dankeschön im Voraus! :)
 
Zuletzt bearbeitet:

Tarrew

Top Contributor
Um das nochmal zu wiederholen:
Du programmierst einen Taschenrechner und suchst praktisch eine Methode die alles für dich macht? Was bleibt dir dann noch an Arbeit? Also man könnte sowas uU. sehr umständlich über String parsen machen etc.
Oder direkt die JavaScript Engine nutzen:
Java:
        Scanner s = new Scanner(System.in);
        System.out.println("Bitte Rechnung eingeben");
        String rechnung = s.nextLine();
      
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("JavaScript");
        try {
            System.out.println(engine.eval(rechnung));
        } catch (ScriptException e) {
            System.out.println("Ungültige Rechnung");
        }
sin, cos etc. muss man schreiben als "Math.sin" und "Math.cos".

Alternativ lässt man sich mit Antlr oÄ einen Lexer und einen Parser generieren und arbeitet damit.
Ich hab das damals für/mit einem User gemacht, der etwas Ähnliches vorhatte.
Siehe:
http://www.java-forum.org/thema/klammerberechnungen-bei-einem-taschenrechner.165828/
 

Zyron

Mitglied
Danke für deinen Beitrag!

Ja, die Sricptengine kenne ich, aber mein Informatiklehrer sagte mir, es gäbe auch Math Parser von anderen Programmierern, die diese schon programmiert haben und da habe ich auch welche gefunden (Open Source), und er meinte, da könne man die komplette rechnung einwerfen und bekommt das Ergebnis wieder heraus, kennt jemand solche?
 

Tarrew

Top Contributor
Zum Beispiel expr:
Java:
        Scanner s = new Scanner(System.in);
        System.out.println("Bitte Rechnung eingeben");
        String rechnung = s.nextLine();
        try {
            Expr expr = Parser.parse(rechnung);
            System.out.println("Ergebnis: " +expr.value());
        } catch (SyntaxException e) {
            System.out.println("Ungültige Rechnung: "+ e.explain());
        }

Ansonsten JEval.
 
K

kneitzel

Gast
Ansonsten gibt es auch schon fertig programmierte Taschenrechner in Java. Dann muss man die auch nicht selbst entwickeln. :)

Die Frage ist, was man hier erwartet. Wenn es um die Interpretation einer Eingabe geht, dann kann das schon sehr komplex sein. Wenn man sich mit der Auswertung beschäftigen will, dann kann man "leichter" anfangen, indem man z.B. eine Prefix Schreibweise für Operationen implementiert. Dann ist das Parsen um einiges leichter und es gibt keine Probleme mit Punkt vor Strichrechnung und all sowas.

Also statt 3 + 4 + 5 wäre die Schreibweise + + 3 4 5 (Also erst 3 + 4 und dann + 5)

Sowas ist recht einfach zu Parsen, da Du einen relativ einfachen Baum hast. Der Baum hat Knoten aus Operatoren (die alle eine feste Nummer an Unterelementen hat) oder eben ein Blatt, das immer eine Zahl sein muss.

Also parst Du einfach, indem du den String von vorne nach hinten durchgehst (Das ist hier schön möglich!)
Du könntest hier einen Tokenizer schreiben, der Eingaben erst einmal in Token verwandelt. Bei + + 3 4 5 wären das die Token "Operator +, "Operator +, Zahl 3, Zahl 4 und Zahl 5.

Wenn Du dann die Token hast, dann brauchst Du auf den Token eine "getNextToken" oder so. Und dann baust Du den Operations-Baum einfach auf:

Der Parse hat dann eine Funktion, die die Token-Liste bekommt und einen (Teil)-Baum zurück gibt.
In diesem Fall würde der Parser dann das Token der Operation + sehen und einen Additions-Knoten erzeugen. Dann wird im Knoten das Parse aufgerufen. Dieses ruft dann einfach erneut dieses Parse Funktion auf und bekommt dann halt wieder ein Additions-Knoten u.s.w.

Der Baum hat dann einen Additionsknoten mit zwei Unterknoten. Der erste Unterknoten ist dann wieder eine Addition mit den Zwei Unterknoten 3 und 4 und der zweite Unterknoten ist dann die 5.

Calculate() auf dem Knoten ist dann eine Funktion, die jeder Knoten haben muss. Bei der addition wird dann halt calculate auf beiden Unterknoten aufgerufen und die Addition beider Ergebnisse zurück gegeben. Bei einem Zahlenknoten wird nur die Zahl zurück gegeben.

Ich hoffe, die Erklärung war halbwegs verständlich. Das wäre eine Implementation, die man selbst recht gut bauen kann.

Alle anderen Dinge sind etwas komplizierter. Die Infix Notation, die wir gewohnt sind, macht alles deutlich komplexer und ist als eine einfache Aufgabe deutlich zu komplex. Wenn dies aber eine Sache ist, die dich interessiert, dann würde ich Dir das Drachenmodel empfehlen (Wobei ich nicht sicher bin, ob das noch aktuell ist. Ich habe mich damit halt vor über 20 Jahren beschäftigt und damals ein Buch mit zwei Bänden dazu durchgearbeitet.) Was ich diesbezüglich gefunden habe wäre z.B. http://dragonbook.stanford.edu/

Man kann natürlich einfach die angebotenen Tools verwenden, ohne zu verstehen, was die genau machen, aber ist etwas, das mir oft widerstrebt. Denn wenn es Probleme und Nebeneffekte gibt, möchte ich diese ja schon verstehen und meine Lösung voll supporten. (Für eine kleine Aufgabe ist dies natürlich nicht so relevant wie bei einem Produkt, welches eingesetzt wird und für den es einen 3rd Level Support gibt der alle Fälle abhandeln können muss.)

(Diesen Parser für Präfix Notation haben wir damals übrigens auch im Rahmen des Informatik Unterrichts geschrieben. Das ist also eine Sache, die sehr gut und einfach in dem kleineren Rahmen möglich ist!)

Konrad
 

Zyron

Mitglied
Danke für deine Alternative, werde mich in Zukunft damit beschäftigen und habe auch schon einen ohne solch eine fertige Klasse gemacht, jedoch sollte dies nur ein sehr kleines Projekt sein und bleiben, weshalb ich JEval dafür genutzt habe.
 
Ä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
P Hilfe bei Java Taschenrechner Java Basics - Anfänger-Themen 25
H Java Taschenrechner Java Basics - Anfänger-Themen 4
M Java Taschenrechner (if-else) Java Basics - Anfänger-Themen 11
M Java Taschenrechner Programmieren Java Basics - Anfänger-Themen 12
C Taschenrechner in Java Java Basics - Anfänger-Themen 6
J Erste Schritte Java CMD Taschenrechner mit Parametern! Java Basics - Anfänger-Themen 16
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
I Java Starthilfe (Taschenrechner) Java Basics - Anfänger-Themen 7
S Taschenrechner in Java - sinnvoll? Java Basics - Anfänger-Themen 3
D Rücktaste bei einem Java Taschenrechner Java Basics - Anfänger-Themen 6
R Java-Taschenrechner Funktioniert nicht Java Basics - Anfänger-Themen 16
B Java Taschenrechner - JFrame Java Basics - Anfänger-Themen 5
B Java-Frame Taschenrechner - String -> Int und umgekehrt Java Basics - Anfänger-Themen 8
S Java-Taschenrechner. Hilfe Java Basics - Anfänger-Themen 10
X Taschenrechner mit Java Swing Java Basics - Anfänger-Themen 2
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben