I am trying to write calculator for + - * / without conditions. The operator is stored as a string. 
Is there anyway to achieve it?
public class Main {
    /**
     * @param args
     */
    public static void main(String[] args) {
        ////String Operator = "";
        String L1="";
        String L2="";
        String op = "+";
        double a = 3;
        double b = 2;
        //Operator p = p.
        Operator p;
        b = Operator.count(a, op, b);
        System.out.println(b);
    }
    public enum Operator {
        PLUS("+"), MINUS("-"), DIVIDE("/"), MULTIPLY("*");
        private final String operator;
        public static double count(double a,String op,double b) {
            double RetVal =0;
            switc开发者_运维知识库h (Operator.valueOf(op)) {
            case PLUS:
                RetVal= a + b;
            case MINUS:
                RetVal= a - b;
            case DIVIDE:
                RetVal= a / b;
            case MULTIPLY:
                RetVal= a * b;
            }
            return RetVal;
        }
        Operator(String operator) {
            this.operator = operator;
        }
        // uniwersalna stała grawitacyjna (m3 kg-1 s-2)
    }
}
Got this error:
Exception in thread "main" java.lang.IllegalArgumentException: No enum const class Main$Operator.+
Any clues?
You could use a strategy pattern and store a calculation strategy for each operator.
interface Calculation {
  double calculate(double op1, double op2);
}
class AddCalculation implements Calculation {
  double calculate(double op1, double op2) {
    return op1 + op2;
  }
}
//others as well
Map<String, Calculation> m = ...;
m.put("+", new AddCalculation());
During execution you then get the calculation objects from the map and execute calculate().
i think using an enum would be a nice option:
Enum Operation{
PLUS("+")
MINUS("-")
DIVIDE("/")
MULTIPLY("*")
}
then you could go with
switch(Operation.valueOf(userInputString)){
case PLUS: return a+b;
case MINUS: return a-b;
case DIVIDE: return a/b;
case MULTIPLY: return a*b;
}
how about hashing? Hash the operators as a key-value pair ("+": +). For the string operatory, hash it and grab the value. Experiment with that
As mentioned by Peter Lawrey, ScriptEngine/JavaScript might be a good choice for this. Visit this little JavaScript interpreter applet to explore the possibilities.
                                        
                                        
                                        
                                        
                                        
                                        
                                        
                                        
 加载中,请稍侯......
      
精彩评论