0

スタックを使用した後置式の評価に関して問題があります

for(int i=0;i<postfix.length;i++){
  System.out.println("iteration:"+(i+1));
  if(postfix[i].equalsIgnoreCase("+") || postfix[i].equalsIgnoreCase("-") 
      || postfix[i].equalsIgnoreCase("*") || postfix[i].equalsIgnoreCase("/") ) {
    num1 = Float.parseFloat((String)out.pop());
    System.out.println("pop:"+num1);
    num2 = Float.parseFloat((String)out.pop());
    System.out.println("pop:"+num2);
    if(postfix[i].equalsIgnoreCase("+")) { 
      temp = num2+num1; 
      out.push(temp);
      System.out.println("push:"+temp);
      }
    else if(postfix[i].equalsIgnoreCase("-")) {   
      temp = num2-num1;   
      out.push((""+temp));
      System.out.println("push:"+temp);
      }
    else if(postfix[i].equalsIgnoreCase("*")) {   
      temp = num2*num1;   
      out.push((""+temp));
      System.out.println("push:"+temp);
      }
    else if(postfix[i].equalsIgnoreCase("/")) {
      temp = num2/num1;
      out.push((""+temp));
      System.out.println("push:"+temp);
      }
  }
  else{
    System.out.println("push:"+postfix[i]);
    out.push(postfix[i]);
  }
}

「24+」のように2つの数字の間でのみ操作を行う場合、コードはうまく機能しますが、「2 4 + 5 +」のようになると、突然エラーが表示されます。マーカーを配置することもできます。私のコード..助けてくれてありがとう?

4

1 に答える 1

0

out.push(temp);ストリングの代わりにフロートをプッシュしている1つのライン。

使用することをお勧めします

Stack<Double> out = new Stack<Double>();

double num1 = out.pop();

out.push(num2 + num1);

out.push(Double.parseDouble(postfix[i]));

Stackはレガシークラスであるため、Dequeを選択することをお勧めしますが、このプロジェクトでStackを変更することを心配する必要はないと思います。

于 2012-11-15T13:04:00.430 に答える