Eclipse Taschenrechner
Guten Tag ich versuche mit Eclipse Juno einen Taschenrechner zu erstellen bin aber mit meinem jetzigen Javawissen am Ende. Ich programmiere noch nicht lange Kann mir jmd. helfen???
Quellcode:
Start.java:
public class Start {
static Fenster f;
public static void main(String[] args) {
f=new Fenster("Fensterprogramm",800,600);
}
}
Fenster.java:
import java.awt.Button; import java.awt.Frame; import java.awt.Label; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener;
public class Fenster extends Frame implements WindowListener, ActionListener{
Button Ba,Bs,Bm,Bd,Erg;
TextField T1,T2,T3;
Label L0;
public Fenster(String titel, int breite, int hoehe) {
this.setTitle(titel);
this.setSize(breite,hoehe);
this.setLayout(null);
Ba = new Button("+");
Ba.setLocation(150,30);
Ba.setSize(20,20);
this.add(Ba);
Bs = new Button("-");
Bs.setLocation(150,60);
Bs.setSize(20,20);
this.add(Bs);
Bm = new Button("*");
Bm.setLocation(150,90);
Bm.setSize(20,20);
this.add(Bm);
Bd = new Button(":");
Bd.setLocation(150,120);
Bd.setSize(20,20);
this.add(Bd);
T1 = new TextField(20);
T1.setLocation(50,75);
T1.setSize(75,20);
this.add(T1);
T2 = new TextField(20);
T2.setLocation(195,75);
T2.setSize(75,20);
this.add(T2);
Erg = new Button("=");
Erg.setLocation(295,75);
Erg.setSize(20,20);
this.add(Erg);
this.addWindowListener(this);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e1) {
if (e1.getSource() == Ba) {
if (e1.getSource() == Erg) {
System.out.println(Integer.parseInt(T1.getText()) + Integer.parseInt(T2.getText()));
}
}
}
@Override
public void windowActivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowClosed(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent arg0) {
System.exit(0);
}
@Override
public void windowDeactivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowOpened(WindowEvent arg0) {
// TODO Auto-generated method stub
}
}
3 Antworten
Es gibt eine Methode mit der man Rechnungen in einem String berechnen kann:
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
try {
System.out.println(engine.eval("4+3"));
} catch (ScriptException e) {
e.printStackTrace();
Ich habe aber auch eine Klasse erstellt, die genauer berechnen kann:
StringCalculation.calculate("4+3");
package fixtures.maths;
import java.math.BigDecimal;
import java.math.MathContext;
public class StringCalculation {
public static double calculate(String expression) {
if(expression == null || expression.length() == 0) {
return 0;
}
return calc(expression.replace(" ", "")).doubleValue();
}
private static BigDecimal calc(String expression) {
if (expression.startsWith("(") && expression.endsWith(")")) {
return calc(expression.substring(1, expression.length() - 1));
}
String[] containerArr = new String[]{expression};
BigDecimal leftVal = getNextOperand(containerArr);
expression = containerArr[0];
if (expression.length() == 0) {
return leftVal;
}
char operator = expression.charAt(0);
expression = expression.substring(1);
while (operator == '*' || operator == '/') {
containerArr[0] = expression;
BigDecimal rightVal = getNextOperand(containerArr);
expression = containerArr[0];
if (operator == '*') {
leftVal = leftVal.multiply(rightVal, MathContext.DECIMAL128);
} else {
leftVal = leftVal.divide(rightVal, MathContext.DECIMAL128);
}
if (expression.length() > 0) {
operator = expression.charAt(0);
expression = expression.substring(1);
} else {
return leftVal;
}
}
if (operator == '+') {
return leftVal.add(calc(expression));
} else {
return leftVal.subtract(calc(expression));
}
}
private static BigDecimal getNextOperand(String[] exp){
BigDecimal res;
if (exp[0].startsWith("(")) {
int open = 1;
int i = 1;
while (open != 0) {
if (exp[0].charAt(i) == '(') {
open++;
} else if (exp[0].charAt(i) == ')') {
open--;
}
i++;
}
res = calc(exp[0].substring(1, i - 1));
exp[0] = exp[0].substring(i);
} else {
int i = 1;
if (exp[0].charAt(0) == '-') {
i++;
}
while (exp[0].length() > i && isNumber((int) exp[0].charAt(i))) {
i++;
}
res = new BigDecimal(exp[0].substring(0, i));
exp[0] = exp[0].substring(i);
}
return res;
}
private static boolean isNumber(int c) {
int zero = (int) '0';
int nine = (int) '9';
return (c >= zero && c <= nine) || c =='.';
}
}
Du musst den Scanner hinzufügen zum Textfield. Er scannt den Text und dadurch kannst du die zahlen addieren...
Klar, wenn du freundlicherweise noch sagen würdest, was deine Frage und/oder dein Problem ist...
Ich komme nicht weiter beim zusammenrechnen der Eingegebenen Zahlen: Wie kann man diese zusammenrechnen wenn mann zb die 1. Zahl eingibt (12) dann auf den button + drückt, dann die 2. Zahl(4) eingibt und wenn man dann auf = drückt soll halt (12+4 = ) 16 herauskommen. Ich weiß nicht wie man die buttons so miteinander verknüpft dass es so wie oben beschrieben passiert... Danke im voraus