パッケージ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")); } }