2017-03-03 6 views
1

私は自分自身で実装されたリンクされたリストを使ってPostfix評価メソッドを作成しています。私はポップを介して最終的なスタック値を返す必要があります。私のメソッドでは、戻り値の型は整数でなければなりません。解決策を試みましたが、「Operand<Integer>からIntegerに変換できません」と伝えます。私は何とかそれを変換する必要があると仮定しますが、私はそれについて行く方法を知らない、どんな助けも高く評価されるでしょう。オペランドの変換<T>を整数に

私はこれが重複している場合、私は謝罪するために何か助けを見つけることができませんでした。ここで

は私の方法であって、ここで

public class ArithPostfixEvaluator implements PostfixEvaluator<Integer> { 

    private final StackInterface<Operand<Integer>> stack; 

    /** 
    * Constructs an {@link ArithPostfixEvaluator} 
    */ 
    public ArithPostfixEvaluator(){ 
     //Initialize the LinkedStack 
     stack = new LinkedStack<>(); 
    } 

    public Integer evaluate(String expr) throws IllegalPostfixExpressionException { 

     ArithPostfixParser parser = new ArithPostfixParser(expr); 
     for (Token<Integer> token : parser) { 
      Type type = token.getType(); 
      switch(type){ 
      case OPERAND: 
      //What to do when we see an operand? 
       //create an operand variable 
       Operand<Integer> operand = token.getOperand(); 
       //push the operand onto the stack 
       stack.push(operand); 
       break; 
      case OPERATOR: 
      //What to do when we see an operator? 
       //create an operator variable 
       Operator<Integer> operator = token.getOperator(); 
       //make a new operand called result 
       Operand<Integer> result; 
       //pop 2 operands 
       Operand<Integer> op1 = stack.pop(); 
       Operand<Integer> op2 = stack.pop(); 
       //the first operand goes in the second position 
       operator.setOperand(2, op1); 
       operator.setOperand(1, op2); 
       //perform operation on result 
       result = operator.performOperation(); 
       //push the result back onto the stack 
       stack.push(result); 
       break; 
      default: 
       throw new IllegalStateException("Parser returned an invalid Type: " + type); 
      }      
     }  
     // what to return? 

     ///////////PROBLEM AREA//////////////// 

     Integer Finalval = stack.pop(); 
     //pop the remaining element on the stack 
     return Finalval ; 
    } 

は私のリンクリストです:

public class LinkedStack<T> implements StackInterface<T> { 

    private LLNode<T> head; 
    private int size; 

    public T pop() throws StackUnderflowException { 
    if(isEmpty()) throw new StackUnderflowException("Stack Underflow yo"); 
    T temp = head.getData(); 
    head = head.getNext(); 
    return temp; 
    } 

    public T top() throws StackUnderflowException { 
     if(isEmpty()) throw new StackUnderflowException("Stack Underflow yo"); 
    return head.getData(); 
    } 

    public boolean isEmpty() { 
    return (head == null); 
    } 

    public int size() { 
    return size; 
    } 

    public void push(T elem) { 
     LLNode<T> newnode = new LLNode<T>(elem); 
     newnode.setNext(head); 
     head = newnode; 
     size++; 
    } 

} 

そして、私のオペランドと演算子クラス:

public class Operand<T> { 
    private final T value; 

    public Operand(T value){ 
     this.value = value; 
    } 
    public T getValue(){ 
     return value; 
    } 
    public String toString() { 
     return value.toString(); 
    } 
} 


public interface Operator<T> { 

    public int getNumberOfArguments(); 

    public Operand<T> performOperation(); 

    public void setOperand(int position, Operand<T> operand); 

} 

答えて

1
private final StackInterface<Operand<Integer>> stack; 

スタックが含まれていOperand<Integer>それで、あなたはこれを行うan't:Integer変数にOperand<Integer>を格納しようと

Integer Finalval = stack.pop(); 

を。できること:

Integer Finalval = stack.pop().getValue();