Eclipse Taschenrechner

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 =='.';
    }
}
Woher ich das weiß:Recherche

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...


XCalcrafterX 
Beitragsersteller
 12.10.2012, 19:25

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