スタック・コンピューティングを使用してJava後置式

パッケージcom.nps.base.xue.DataStructure.stack.utils。

インポートjava.util.Scanner; 
輸入java.util.Stackを; 

/ * 
 * @author XueWeiWei 
 * @date 2019年7月7日午前9時02分
 * / 
パブリッククラスPostfixEvaluator { 
    民間最終静的チャーADD = '+'。
    民間最終静的char型のSUBTRACT = ' - '; 
    民間最終静的char型のMULTIPLY = '*'; 
    民間最終静的char型のDIVIDE = '/'; 

    プライベート・スタック<整数>スタック。

    / ** 
     *创建一个評価
     * / 

    パブリックPostfixEvaluator(){ 
        スタック=新しいスタック<整数>(); 
    } 

    パブリックINTが評価する(文字列のexpr){ 
        int型のOP1、OP2、
        文字列トークン。
        スキャナパーサ=新しいスキャナ(expr)は、

        一方、(parser.hasNext()){ 
            トークン= parser.next()。

            IF(isOperator(トークン)){ 
                OP2 =(stack.pop())intValue()。
                OP1 =(stack.pop())intValue()。
                結果= evaluateSingleOperator(token.charAt(0)、OP1、OP2)。
                stack.push(新しい整数(結果)); 
            }他{ 
                stack.push(新しい整数(Integer.parseInt(トークン)))。
            } 
        } 
        戻り値の結果; 
    } 

    プライベートブールisOperator(文字列トークン){ 
        リターン(token.equals( "+")|| token.equals( " - ")|| token.equals( "*")|| token.equals(」
    } 

    プライベートINT evaluateSingleOperator(チャーオペレータ、INT OP1、OP2 INT){ 
        int型の結果= 0; 

        スイッチ(オペレータ){ 
            ケースADD:
                結果= OP1 + OP2。
                ブレーク; 
            ケースSUBTRACT:
                結果= op1- OP2。
                ブレーク; 
            ケースMULTIPLY:
                結果= OP1 * OP2。
                ブレーク; 
            ケースDIVIDE:
                結果= OP1 / OP2。
                ブレーク; 
        } 

        戻り値の結果;
    } 
}

  

パッケージcom.nps.base.xue.DataStructure.stack.test; 

輸入com.nps.base.xue.DataStructure.stack.utils.PostfixEvaluator。

インポートjava.util.Scanner; 

/ * 
 * @author XueWeiWei 
 * @date 2019年7月7日午前9時01分
 * / 
publicクラスPostfixTester { 
    パブリック静的無効メイン(文字列[] args){ 
        再び文字列式、。
        int型の結果。

        =新しいスキャナ(System.in)でスキャナ。

        実行{ 
            PostfixEvaluator評価者は=新しいPostfixEvaluator()。
            System.out.println( "例えば、5 + 4 3 2 1 - + *")。
            System.out.println(); 
            式= in.nextLine()。

            System.out.println( "输入的表达式:" +式)。 
            結果= evaluator.evaluate(式); 
            System.out.printlnは( ">>>>>結果:"結果+); 

            System.out.printlnは( "入力式[Y / N]かどうかを次?"); 
            再びin.nextLine =(); 

        }ながら(again.equalsIgnoreCase( "Y")); 
    } 
}

  

おすすめ

転載: www.cnblogs.com/xww115/p/11145127.html