簡體   English   中英

我如何為RPN算法添加一元運算符,以在Java中計算后綴表達式

[英]how do I add unary operator for RPN algorithm that calculates postfix expression in java

我必須創建一個計算后綴表達式的應用程序。 我可以在網上找到它( rosetta代碼 ),但是它缺少一元運算符。 符號“〜”應該表示我嘗試添加的一元運算符,但不幸的是它沒有用。 請指教;

else if(token.equals("~")){
            System.out.print("Operate\t\t");
            double firstOperand = stack.pop();
            stack.push(firstOperand * -1);
}else

一元~未定義為雙精度值。 因此,不建議通過以下方式支持操作員:

  …
  try {
    tokenNum = Double.parseDouble( token );
  }
  catch( NumberFormatException e ) {
    if( token.startsWith( "~" ) ) {
      tokenNum = (double) ~ Integer.parseInt( token.substring( 1 ) );
      token = tokenNum.toString();
    }
  }
  …

  return( expr.replaceAll( "[^\\^\\*\\~\\+\\-\\d/\\s]", "" ) );  // cleanExpr

因此,RPN語言7th不支持一元~ 您必須致電例如。 2 not代替~2

Rosetta代碼中的上述更改沒有停止一切

evalRPN( "~3 ~4 ~2 * ~1 ~5 - ~2 ~3 ^ ^ / +" );

Input   Operation   Stack after
~3  Push        [-4.0]
~4  Push        [-5.0, -4.0]
~2  Push        [-3.0, -5.0, -4.0]
*   Operate     [15.0, -4.0]
~1  Push        [-2.0, 15.0, -4.0]
~5  Push        [-6.0, -2.0, 15.0, -4.0]
-   Operate     [4.0, 15.0, -4.0]
~2  Push        [-3.0, 4.0, 15.0, -4.0]
~3  Push        [-4.0, -3.0, 4.0, 15.0, -4.0]
^   Operate     [0.012345679012345678, 4.0, 15.0, -4.0]
^   Operate     [1.017262041564032, 15.0, -4.0]
/   Operate     [14.745463201337605, -4.0]
+   Operate     [10.745463201337605]
Final answer: 10.745463201337605

第7個結果相同

ok> 3 not 4 not 2 not * 1 not 5 not - 2 not 3 not y^x y^x / +
ok> .s
› 10,7454632
——

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM