Taschenrechner

destiny

Mitglied
Hi, ich will mich an einem Taschenrechner versuchen und bin soweit gekommen:

1. Ich habe alle für mich nötigen buttons erstellt (zahlen 0 bis 9, plus, minus, multiplikation, division und eine Calc taste zum kalkulieren).
2. Die buttons haben soweit die funktion, dass sie in einem JLabel ihren Wert eintragen.

Wenn ich nun im JLabel einen Term, wie: "5+5" stehen habe, so ist dies leider nur ein String, mit dem ich nicht rechnen kann.

über getText() bekomme ich diesen String und speichere es in einer variablen, aber WIE wandele ich das Stück Term in eine für JAVA errechenbare Zeile um? Ich kann ja kein + in ein integer umwandeln, oder? (dachte es geht nur bei zahlen)

Danke im voraus!
Destiny
 

ARadauer

Top Contributor
Ja stimmt ein + ist ja auch keine Zahl. Ich würde einfach nicht alles in einen String speichern.
Ich würde mir einfach das Rechnzeichen in einem char merken und bei der zweiten zahl dann die richtige Operation ausführen.... zb mit switch

Es gibt natürlich schönere Ansatze, aber ich denke so ist es für den Anfang am geeignetsten.

Einen guten schönen Taschenrechner zu schreiben, hat eigentlich gar nix mehr mit einem Anfänger Beispiel zu tun...
 

Volvagia

Top Contributor
Will auch einen Vorschlag abgeben. :D
Meiner wäre bei Tastendruck die Zahlen und Rechenmethode direkt abzuspeichern und das JLabel nur für den Output und nicht gemischt zu verwenden.
 

destiny

Mitglied
Mit String.split nach den Rechenzeichen splitten und dann den Rest in Zahlen parsen und entsprechend verknüpfen, wäre mein Vorschlag.

Parsen eben versucht, komischerweise folgende fehlermeldung:

Dangling meta character '+' near index 0

hab das + mit einem doppelpunkt ersetzt... damit funktioniert es -.- da schein wohl das + probleme zu machen...

Also am praktischsten wäre natürlich eine in java eingebaute methode... leider kenne ich mich da noch nicht gut genug aus^^

Wenns nix weiter gibt, werde ich mir den Tipp von ARadauer zu Herzen nehmen und gar nicht erst Strings stehen lassen.

also: kennt jemand zufällig eine Methode / Klasse, die solche Strings mit zahlen und chars + - in einen für JAVA errechenbaren Term vereinfacht?
 
V

vanny

Gast
ich würde die Ausgabe und die Rechenoperation auch voneinander trennen und die gesamte Rechnung in eine Liste ablegen, dann kann man auch gut mit Punkt vor Strich arbeiten.

Strichrechnung ablegen und Punktrechnung direkt berechnen sollte gehen oder !?
 
Zuletzt bearbeitet von einem Moderator:

destiny

Mitglied
ich würde die Ausgabe und die Rechenoperation auch voneinander trennen und die gesamte Rechnung in eine Liste ablegen, dann kann man auch gut mit Punkt vor Strich arbeiten.

Strichrechnung ablegen und Punktrechnung direkt berechnen sollte gehen oder !?

Klar. Auch Terme wie " 5*5+2/2 " sollten korrekt berechnet werden. Es ist nur so, dass wenn man diesen Term so in java eingibt:

int x = 5*5+2/2

so berechnet java diesen schon korrekt, da Multiplikation und Division eine höhere "Rechenpriorität" besitzen. Daher wäre eine Art eingebauter Übersetzer, der es 1:1 in java übersetzt echt genial^^.
Jedoch merke ich schon hier, bei meinem "ersten richtigen Programm", dass man auf so viele spezifische Probleme stößt, dass Java gar nicht für alles eine Lösung hat. Muss Weiterschlaumachen ! :rtfm:

@Landei,

die Parser Methode scheint auch sehr interessant und ist sicherlich eine sauberere Lösung! Das werde ich mir mal ansehen :applaus:
 

eRaaaa

Top Contributor
dass man auf so viele spezifische Probleme stößt, dass Java gar nicht für alles eine Lösung hat
Jaein, ist mein Post untergegangen? :D
Java:
		ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
		double x = (Double) engine.eval("5*5+2/2");

:eek:
 

Andi_CH

Top Contributor
Irgendwann hatten wir das schon mal - da liegt noch was auf meinem Disk rum, das sicher läuft. Ob es alles kann was gefordert ist weiss ich nicht.

Java:
public class Cpu {

	private final static char plus = '+';
	private final static char minus = '-';
	private final static char mult = '*';
	private final static char div = '/'; 

	private static int posLow(String formula) {
		int posP = formula.indexOf(plus);
		int posM = formula.indexOf(minus);
		return Math.max(posP, posM);
	}

	private static int posHigh(String formula) {
		int posP = formula.indexOf(mult);
		int posM = formula.indexOf(div);
		return Math.max(posP, posM);
	}

	public static double evaluate (String formula) {
		System.out.println("Evaluate " + formula);
		int posHigh = posHigh(formula);
		int posLow = posLow(formula);
		double res = 0;
		int opPos = -1;
		if (posLow != -1) {
			opPos = posLow;
		} else if (posHigh != -1) {
			opPos = posHigh;
		}
		if (opPos == -1 ) {
			try {
				res = Integer.parseInt(formula);
			} catch (Exception e) {
				e.printStackTrace();
			}
		} else {
			String left = formula.substring(0, opPos).trim();
			String right = formula.substring(opPos+1).trim();
			char op = formula.charAt(opPos);
			System.out.println("Left = " + left);
			System.out.println("Op = " + op);
			System.out.println("Right = " + right);
			switch (op) {
			case plus:
				res = evaluate(left) + evaluate(right);
				break;
			case minus:
				res = evaluate(left) - evaluate(right);
				break;
			case mult:
				res = evaluate(left) * evaluate(right);
				break;
			case div:
				res = evaluate(left) / evaluate(right);
				break;
			}
		}
		return res;
	}
}

und das Testprogramm dazu:

Java:
package com.javaforum.formelparser;

public class Test {
	public static void main(String... args) {
		String formel = " 1*1 +2* 3 *1 ";
		System.out.println("Formel : " + formel);
		System.out.println("Resultat : " + Cpu.evaluate(formel));
	}
}
 

destiny

Mitglied
Jaein, ist mein Post untergegangen? :D
Java:
		ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
		double x = (Double) engine.eval("5*5+2/2");

:eek:

Also wenn ich das versuche, bekomme ich Schwierigkeiten auf den abgespeicherten Double Wert von x zuzugreifen! Meldung:

x cannot be resolved to a variable

Wie wandele ich x wieder in einen String um, um dieses "Ergebnis" anzuzeigen, wenn valueOf(x) und:
String result = (new Double(x).toString());
nicht funktionieren, weil x wie gesagt nicht als Variable aufgelöst werden kann?
 

destiny

Mitglied
afaik funktioniert das nicht auf einem mit new angelegten Objekt. Versuch mal folgendes:

Java:
String result = ((Double)x).toString());

Ich bekomm nen klammerfehler... und wenn ich die letzte Klammer entferne, wieder die selbe Fehlermeldung:

x cannot be resolved as a variable

Hoffe ja, dass mir eRaaaa weiterhelfen kann, da er mir diese Möglichkeit vorgeschlagen hat ???:L
 

Volvagia

Top Contributor
Zeig mal mehr Code. Wenn du eine Variable deklarierst auf die du nicht zugreifen kannst, hast du sie wohl in einen Block deklarierst und versuchst von außerhalb darauf zuzugreifen.
 

Andi_CH

Top Contributor
Ich bekomm nen klammerfehler... und wenn ich die letzte Klammer entferne, wieder die selbe Fehlermeldung:

x cannot be resolved as a variable

Hoffe ja, dass mir eRaaaa weiterhelfen kann, da er mir diese Möglichkeit vorgeschlagen hat ???:L

Dann deklariere doch x einfach eine Zeile weiter oben - ohne gehts wirklich nicht!

(Wie war das mit den Basics?)
 
G

Gast2

Gast
Sorry eine Klammer zuviel. Hättest du aber auch sehen können ;)

Java:
String result = ((Double)x).toString();
 

destiny

Mitglied
Ihr hattet schon recht, sobald ihr nur mitbekommen habt, was die fehlermeldung war.

Eclipse hat gemeckert, dass ich das Statement von eRaaa eben so in einem TRY einfügen soll:

Java:
	private class EnterHandeler implements ActionListener{
		public void actionPerformed(ActionEvent event) {

try{
							ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
	        double r = (Double) engine.eval(display.getText());
			String resultat = ((Double)r).toString();
			}catch(Exception e){}

}
}


Dann muss natürlich auch mein String darin stehen im "TRY", was zuvor nicht der fall war.

Ihr seht nun den code von meiner "privaten Inneren Klasse", die den ActionListener für den "Kalkulieren"(Calculate) Button enthält.
JETZT: läuft es zwar ohne Fehlermeldung, aber mein "Calculate" Button des Taschenrechners macht gar nichts. Ist das der Exception Fall? oder funktioniert die Try Methode nicht richtig?
 
Zuletzt bearbeitet:

Eldorado

Bekanntes Mitglied
Mach doch einfach mal eine Textausgabe. Weder im Try- noch im Catch-Block werden Werte ausgegeben oder irgend wo anders als in der Methode selbst gespeichert. So kannst du nicht sehen, was gemacht wurde.
 

destiny

Mitglied
Mach doch einfach mal eine Textausgabe. Weder im Try- noch im Catch-Block werden Werte ausgegeben oder irgend wo anders als in der Methode selbst gespeichert. So kannst du nicht sehen, was gemacht wurde.

:eek:

Also das war der Beweis, dass ich eben doch noch Anfänger bin... da zerbricht man sich den Kopf darüber, was nciht stimmt, aber ein Befehl für die Ausgabe, die habe ich vergessen!

Danke euch allen! :toll:

Der Taschenrechner bekommst jetzt noch eine "delete" Taste und eine "Punkt/Komma" Taste für Dezimalzahlen, und schon werden die doubles wunderbar berechnet :toll:

Thema erledigt, einmal ein Dankeschön an alle, die geholfen haben!

EDIT:
Hier nochmal der komplette Code (für alle Interessenten, es fehlen allerdings noch der punkt, und die löschen taste)

"Tuna" - Klasse:
(davon ein Objekt in der Main Klasse erstellen und es läuft mit: tuna main = new tuna();)

Java:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;




public class tuna extends JFrame{
	static JLabel display = new JLabel("");
	
	public tuna (){
		
		gui window = new gui();
		window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		window.setSize(800,600);
		window.setVisible(true);

		EventHandeler handeler = new EventHandeler();
		EnterHandeler toEnter = new EnterHandeler();

		//add numbers from 0 - 9
		int[] numbers = new int[10];
		JPanel buttonPane = new JPanel(new GridLayout(3,3,5,5));
		buttonPane.setSize(300,300); 
		buttonPane.setLocation(0, 0);
		//for loop - buttons 0 - 9
		for(int i=0; i<numbers.length; i++){
			numbers[i] = i;
			String x = String.valueOf(i);
			JButton n = new JButton(x);
			n.addActionListener(handeler);
			buttonPane.add(n);
		}
		// adding other buttons
		JButton plus = new JButton("+");
		buttonPane.add(plus);
		plus.addActionListener(handeler);
		JButton minus = new JButton("-");
		buttonPane.add(minus);
		minus.addActionListener(handeler);
		JButton mult = new JButton("*");
		buttonPane.add(mult);
		mult.addActionListener(handeler);
		JButton division = new JButton("/");
		buttonPane.add(division);
		division.addActionListener(handeler);
		JButton enter = new JButton("Calc");
		buttonPane.add(enter);
		enter.addActionListener(toEnter);
		
		window.add(buttonPane);
		

		display.setLayout(new BorderLayout());
		window.add(display, BorderLayout.SOUTH);
	}
	private class EventHandeler implements ActionListener{

		
		public void actionPerformed(ActionEvent event) {
			String input = event.getActionCommand();
			
			display.setText(display.getText() + input);
			
		}
		
	}
	
	private class EnterHandeler implements ActionListener{

		
		public void actionPerformed(ActionEvent event) {

			try{
							ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
	        double r = (Double) engine.eval(display.getText());
			String resultat = ((Double)r).toString();
			display.setText(resultat);
			}catch(Exception e){}

			
			
			
			
		}
		
	}
}
 
Zuletzt bearbeitet:
2

2we23e34ef

Gast
JEXL - Commons JEXL Overview

Code:
  JexlEngine jexlEngine=new JexlEngine();
        Expression expr=jexlEngine.createExpression(DEIN_STRING _MIT_DER_EINGABE);
        JexlContext jexlContext=new MapContext();
        jexlContext.set("PI",Math.PI);
        System.out.println(expr.evaluate(jexlContext));
 
Ä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
S Taschenrechner Java Basics - Anfänger-Themen 13
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
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