Hallo alle,
Ich habe ein package fur einen Rechner geschrieben. Aber ich habe ein Problem. Ich kann aber Dezimalzahlen und mehrstellige Zahlen nicht einfuhren. Ich glaube, ich hab ein Problem mit isValidExpression method.
Weiss jemand, was das Problem sein kann?
Das ist mein Code fur Starter Engine (Das eigentliche Program)
[/code]
Ich habe ein package fur einen Rechner geschrieben. Aber ich habe ein Problem. Ich kann aber Dezimalzahlen und mehrstellige Zahlen nicht einfuhren. Ich glaube, ich hab ein Problem mit isValidExpression method.
Weiss jemand, was das Problem sein kann?
Das ist mein Code fur Starter Engine (Das eigentliche Program)
Code:
package kenroyG.assignment03.calculator;
public class StarterEngine extends Engine {
public String evaluateExpression(String inExpr) {
if (!isValidExpression(inExpr = inExpr.replaceAll(" ", "")))
return "invalid";
inExpr = ""+eval(inExpr.toCharArray());
if (inExpr.endsWith(".0"))
return inExpr.substring(0,inExpr.length()-2);
return inExpr;
}
private double eval(char[] expr) {
double result = 0;
if (expr.length > 0)
result = Character.getNumericValue(expr[0]);
for (int i=1; i<expr.length; i+=2)
result = eval(result, expr[i], Character.getNumericValue(expr[i+1]));
return result;
}
private double eval(double a, char op, double b) {
switch (op) {
case '+': return a+b;
case '-': return a-b;
case '*': return a*b;
case '/': return a/b;
}
throw new RuntimeException ("Unknown operator '"+op+"'");
}
protected String getDeleteString() {
return "Bksp";
}
protected String getEvalString() {
return "=";
}
public String[][] getInputLayout() {
return new String[][] { {"7", "8", "9", "/"},
{"4", "5", "6", "*"},
{"1", "2", "3", "+"},
{"0", getDeleteString(), getEvalString(), "-"} };
}
protected String[][] getTest() {
return new String[][] { {"-2/1+5", "invalid"}, // unary
{"1+5/9*3.3+2", "invalid"}, // decimal
{"9*88+2-5", "invalid"}, // multi digit
{"6-4*+7", "invalid"}, // multi operator
{"2+3-a/6", "invalid"}, // illegal char
{"*", "invalid"},
{"5+3/7*", "invalid"},
{"2", "2"},
{"2/1+5", "7"},
{"8+4/3*5+2", "22"},
{"9*8+2-5", "69"},
{"6-4+7+9/3/2*3*2-6/5", "2.4"} };
}
public boolean isValidExpression(String input) {
char[] expr = input.toCharArray();
boolean op = false;
for (int i=0; i<expr.length; i++) {
if (Character.isDigit(expr[i]) && !op)
op = !op;
else if (isOperator(expr[i]) && op)
op = !op;
else
return false;
}
return op;
}
private boolean isOperator(char op) {
return op=='+' || op=='-' || op=='*' || op=='/';
}
protected String updateExpression(String input, String expression) {
return super.updateExpression(input, expression);
}
public String toString() {
return "Starter Engine";
}
}