2012-03-13 5 views
5

私は2つの数字追加するには、この列挙型を使用します(たとえば5と3)、私はこの列挙を使用する8 または として出力を取得したいENUM列挙型として演算

enum Operations { 
    ADD, 
    SUBTRACT, 
    MULTIPLY 
} 

があると二つの数字(9言うと3)を引くと6

質問として出力を得るために:

  • が、これは可能ですか?
  • の場合は、この列挙型に対して行う変更は何ですか?

答えて

17

enum sが抽象メソッドを持つことができ、各メンバーが異なり、それを実装することができます。

public int computeOperation(int leftOperand, Operation op, int rightOperand) { 
    switch(op) { 
     case ADD: 
      return leftOperand + rightOperand; 
     case SUBTRACT: 
      return leftOperand - rightOperand; 
     case MULTIPLY: 
      return leftOperand * rightOperand; 
    } 

    return null; 

あなたはそれぞれのケースのために戻っているので、あなたは:

enum Operations { 
    ADD { 
    public double apply(double a, double b) { return a + b; } 
    }, 
    SUBTRACT { 
    public double apply(double a, double b) { return a - b; } 
    }, 
    MULTIPLY { 
    public double apply(double a, double b) { return a * b; } 
    }, 
    ; 

    public abstract double apply(double a, double b); 
} 

は、実行するどのような操作のためのフラグとして列挙型を使用する必要がありますあなたは

Operations op = ...; 
double result = op.apply(3, 5); 
+2

非常に良い答え、+1を。 – Perception

4

あなたは、列挙型の値にスイッチを使用することができます。

switch (operator) { 
case ADD: 
    ret = a + b; 
    break; 
case SUBTRACT: 
    ret = a - b; 
    break; 
case MULTIPLY: 
    ret = a * b; 
    break; 
} 
1

を行うことができます落ちることを心配する必要はありません。

4

どのようにJAVA 8つの機能の使用方法について:

enum Operation implements DoubleBinaryOperator { 
    PLUS ("+", (l, r) -> l + r), 
    MINUS ("-", (l, r) -> l - r), 
    MULTIPLY("*", (l, r) -> l * r), 
    DIVIDE ("/", (l, r) -> l/r); 

    private final String symbol; 
    private final DoubleBinaryOperator binaryOperator; 

    private Operation(final String symbol, final DoubleBinaryOperator binaryOperator) { 
     this.symbol = symbol; 
     this.binaryOperator = binaryOperator; 
    } 

    public String getSymbol() { 
     return symbol; 
    } 

    @Override 
    public double applyAsDouble(final double left, final double right) { 
     return binaryOperator.applyAsDouble(left, right); 
    } 
} 
関連する問題