r2uqqxkm 您所在的位置:网站首页 微信小程序只限投一票破解 r2uqqxkm

r2uqqxkm

2022-11-23 13:30| 来源: 网络整理| 查看: 265

閫嗘尝鍏扮畻娉曚粙缁?/h2>

鍋囧畾缁欏畾涓€涓彧 鍖呭惈 鍔犮€佸噺銆佷箻銆侀櫎锛屽拰鎷彿鐨勭畻鏈〃杈惧紡锛屼綘鎬庝箞缂栧啓绋嬪簭璁$畻鍑哄叾缁撴灉銆?

闂鏄細鍦ㄨ〃杈惧紡涓紝鎷彿锛屼互鍙婃嫭鍙风殑澶氬眰宓屽 鐨勪娇鐢紝杩愮畻绗︾殑浼樺厛绾т笉鍚岀瓑鍥犵礌锛屼娇寰椾竴涓畻鏈〃杈惧紡鍦ㄨ绠楁椂锛岃繍绠楅『搴忓線寰€鍥犺〃杈惧紡鐨勫唴瀹硅€屽畾锛屼笉鍏疯寰嬫€с€?杩欐牱寰堥毦缂栧啓鍑虹粺涓€鐨勮绠楁寚浠ゃ€?br>浣跨敤閫嗘尝鍏扮畻娉曞彲浠ヨ交鏉捐В鍐炽€備粬鐨勬牳蹇冩€濇兂鏄皢鏅€氱殑涓紑琛ㄨ揪寮忚浆鎹负鍚庣紑琛ㄨ揪寮忋€?/p>

杞崲涓哄悗缂€琛ㄨ揪寮忕殑濂藉鏄細 1銆佸幓闄ゅ師鏉ヨ〃杈惧紡涓殑鎷彿锛屽洜涓烘嫭鍙峰彧鎸囩ず杩愮畻椤哄簭锛屼笉鏄畬鎴愯绠楀繀椤荤殑鍏冪礌銆?br>2銆佷娇寰楄繍绠楅『搴忔湁瑙勫緥鍙锛岃绠楁満鑳界紪鍐欏嚭浠g爜瀹屾垚璁$畻銆傝櫧鐒跺悗缂€琛ㄨ揪寮忎笉鍒╀簬浜洪槄璇伙紝浣嗗埄浜庤绠楁満澶勭悊銆?/p>

 

绠楁湳琛ㄨ揪寮忕殑缁勬垚閮ㄥ垎

涓€涓〃杈惧紡鏈夊涓嬪強閮ㄥ垎鍏冪礌缁勬垚

鎿嶄綔鏁帮細鍙互鏄换浣曟暟鍊硷細1锛?9 锛?3.14159 ... 杩愮畻绗︼細

鍒嗕负鍗曠洰杩愮畻绗?濡?sin , cos 锛?鍙岀洰杩愮畻绗?濡?鍔犮€佸噺銆佷箻銆侀櫎 銆?/p>

杩愮畻绗﹁繕浼氬垎涓哄乏缁撳悎鎬у拰鍙崇粨鍚堟€с€傚悓绾х殑宸︾粨鍚堟€х殑杩愮畻绗︿粠宸﹀線鍙充緷娆¤绠椼€傚悓绾х殑鍙崇粨鍚堟€х殑杩愮畻绗︿粠鍙冲線宸︿緷娆¤绠椼€? 濡? 7-6+1 绛変环浜?(7-6) + 1 锛屽洜涓烘櫘閫氬姞鍑忚繍绠楃鏄乏缁撳悎鎬х殑銆?br> 濡傦細C璇█涓殑缁勫悎璧嬪€艰鍙ワ細 a = b = 1 绛変环浜? a = (b=1) 锛屽洜涓鸿祴鍊艰繍绠楃鍦–涓槸鍙崇粨鍚堟€х殑銆?br> 瀵逛簬鍗曠洰杩愮畻绗︼紝杩樺垎涓哄墠缂€杩愮畻绗﹀拰鍚庣紑杩愮畻绗︼紝濡?sin(x) 鏄墠缂€杩愮畻绗︼紝鑰?闃朵箻杩愮畻绗? 锛?n ! 灏辨槸鍚庣紑杩愮畻绗︺€?

 

鍒嗙晫绗︼細涓€鑸槸鍦嗘嫭鍙?( ) 锛?鐢ㄤ簬鎸囩ず杩愮畻鐨勫厛鍚庨『搴忋€?/li>

鍦ㄦ湰鏂囦腑锛屽彧浼氳€冭檻绠楁湳琛ㄨ揪寮?鏈?鍔犮€佸噺銆佷箻銆侀櫎 杩愮畻绗︼紝 宸﹀彸鍦嗘嫭鍙?( 锛?) 锛屽悎娉曠殑鏁板瓧绠€鍗曠殑鎯呭喌銆傚浜庢洿鍔犲鏉傜殑杩愮畻绗︼紝鍙瀵硅繖涓畻娉曡交寰慨鏀癸紝灏卞彲浠ユ敮鎸併€?/p>

 

閫嗘尝鍏扮畻娉曠殑鍘熺悊

閫嗘尝鍏扮畻娉曠殑鏍稿績姝ラ灏?涓細 1銆佸皢涓紑琛ㄨ揪寮忚浆鎹负鍚庣紑琛ㄨ揪寮忥紝渚嬪杈撳叆鐨勫師濮嬭〃杈惧紡鏄? 3*锛?+7锛? 锛岃浆鎹㈠緱鍒? 3 5 7 + * 2銆佹牴鎹悗缂€琛ㄨ揪寮忥紝鎸夌収鐗瑰畾鐨勮绠楄鍒欏緱鍒版渶缁堢粨绠楃粨鏋?/p>

涓嬮潰璇︾粏浠嬬粛杩欎釜2姝ョ殑鎿嶄綔銆?/p>

涓紑琛ㄨ揪寮忚浆鎹负鍚庣紑琛ㄨ揪寮?/strong> 浣犻渶瑕佽瀹氫竴涓爤SOP,鍜屼竴涓嚎鎬ц〃 L 銆係OP鐢ㄤ簬涓存椂瀛樺偍杩愮畻绗﹀拰鍒嗙晫绗? 锛孡鐢ㄤ簬瀛樺偍鍚庣紑琛ㄨ揪寮忋€?br>閬嶅巻鍘熷琛ㄨ揪寮忎腑鐨勬瘡涓€涓〃杈惧紡鍏冪礌 锛?锛夊鏋滄槸鎿嶄綔鏁帮紝鍒欑洿鎺ヨ拷鍔犲埌 L涓€傚彧鏈?杩愮畻绗?鎴栬€? 鍒嗙晫绗︼紙 鎵嶅彲浠ュ瓨鏀惧埌 鏍圫OP涓?br>锛?锛夊鏋滄槸鍒嗙晫绗?br>         鈪?濡傛灉鏄乏鎷彿 ( 锛?鍒?鐩存帴鍘嬪叆SOP锛岀瓑寰呬笅涓€涓渶杩戠殑 鍙虫嫭鍙?涓庝箣閰嶅銆?br>          鈪?濡傛灉鏄彸鎷彿锛夛紝鍒欒鏄庢湁涓€瀵规嫭鍙峰凡缁忛厤瀵?鍦ㄨ〃杈惧紡杈撳叆鏃犺鐨勬儏鍐典笅)銆備笉灏嗗畠鍘嬫爤锛屼涪寮冨畠锛岀劧鍚庝粠SOP涓嚭鏍堬紝寰楀埌鍏冪礌e锛屽皢e渚濇杩藉姞鍒癓閲屻€備竴鐩村惊鐜紝鐩村埌鍑烘爤鍏冪礌e 鏄?宸︽嫭鍙?( 锛屽悓鏍蜂涪寮冧粬銆?br>锛?锛夊鏋滄槸杩愮畻绗︼紙鐢╫p1琛ㄧず锛?br>        鈪犲鏋淪OP鏍堥《鍏冪礌锛堢敤op2琛ㄧず锛?涓嶆槸杩愮畻绗︼紝鍒欎簩鑰呮病鏈夊彲姣旀€э紝鍒欑洿鎺ュ皢姝よ繍绠楃op1鍘嬫爤銆?渚嬪鏍堥《鏄乏鎷彿 ( 锛屾垨鑰呮爤涓虹┖銆?br>         鈪?濡傛灉SOP鏍堥《鍏冪礌锛堢敤op2琛ㄧず锛?鏄繍绠楃 锛屽垯姣旇緝op1鍜?op2鐨勪紭鍏堢骇銆傚鏋渙p1 > op2 锛屽垯鐩存帴灏嗘杩愮畻绗p1鍘嬫爤銆?br> 濡傛灉涓嶆弧瓒硂p1 > op2锛屽垯灏唎p2鍑烘爤锛屽苟杩藉姞鍒癓锛岄噸澶嶆楠?銆?br> 涔熷氨鏄锛屽鏋滃湪SOP鏍堜腑锛屾湁2涓浉閭荤殑鍏冪礌閮芥槸杩愮畻绗︼紝鍒欎粬浠繀椤绘弧瓒筹細涓嬪眰杩愮畻绗︾殑浼樺厛绾т竴瀹氬皬浜庝笂灞傚厓绱犵殑浼樺厛绾э紝鎵嶈兘鐩搁偦銆?/p>

鏈€鍚庯紝濡傛灉SOP涓繕鏈夊厓绱狅紝鍒欎緷娆″脊鍑鸿拷鍔犲埌L鍚庯紝灏卞緱鍒颁簡鍚庣紑琛ㄨ揪寮忋€?/p>

 

浼唬鐮?/p>

#灏嗗弬鏁颁腑缂€琛ㄨ揪寮廵xpression杞负鍚庣紑琛ㄨ揪寮忓瓨鏀惧湪L涓紝杩斿洖L function infixToSuffix(expression): { for each element in expression #瀵硅〃杈惧紡涓殑姣忎竴涓厓绱?/span> { if (element 鏄竴涓搷浣滄暟) { L.append(element) #灏嗚繖涓厓绱犺拷鍔犲埌绾挎€ц〃L鍚?/span> } else if (element 鏄?涓€涓繍绠楃) { While (sop鏍?涓嶄负绌? && sop鏍堥《鍏冪礌 鏄竴涓繍绠楃 && element鐨勪紭鍏堢骇 { L.append(sop.pop()) } return L }

 

绀轰緥鍥?/p>

 

 

鏍规嵁鍚庣紑琛ㄨ揪寮忚绠楀緱鍒版渶缁堢粨鏋?/strong>   鎵ц杩欐鎿嶄綔鏃讹紝涔熼渶瑕佷竴涓爤scalc锛岀敤浜庡瓨鏀捐绠椾腑鐨勬搷浣滄暟銆?/div>

浼唬鐮?/p>

function suffixToResult(suffix_expression) { for each element in suffix_expression { if(element 鏄?鎿嶄綔鏁? { scalc.push(element) } else if(element 鏄繍绠楃) { #浠庢爤涓脊鍑?涓搷浣滄暟 num1 鍜?num2 銆傛敞鎰忥細鍚庡脊鍑虹殑num2鏄涓€鎿嶄綔鏁帮紝num1鏄浜屾搷浣滄暟 銆? #鍥犱负杩欓噷鑰冭檻鐨勯兘鏄簩鍏冭繍绠楃锛屽洜姝ら渶瑕佸脊2涓厓绱犲嚭鏉ヨ繘琛岃繍绠椼€?/span> num1 = scalc.pop() num2 = scalc.pop() #浣跨敤element浠h〃鐨勮繍绠楃瀹屾垚 num2 鍜?num1 鐨勮绠楋紝浜х敓涓存椂缁撴灉 temp_value temp_value = num2 銆恊lement鐨勮繍绠楃: + ,- ,* , / 銆?num1 #灏唗emp_value鍘嬫爤 scalc.push(temp_value) } #濡傛灉涓€鍒囨甯革紝鏈€鍚庢爤scalc涓粎浠呭彧鏈変竴涓厓绱狅紝杩欎釜鍏冪礌灏辨槸鏈€缁堢殑缁撴灉 return sclac.pop() } }

 

绀轰緥鍥?/p>

 

浠g爜瀹炵幇锛圝ava锛?/h2> 1銆佹牳蹇冪畻娉曞疄鐜版槸 InfixExpression绫讳腑鐨?   public SuffixExpression toSuffixExpression()  鍜?SuffixExpression  绫讳腑鐨?  double getResultValue() throws Exception 銆?/div> 2銆佸苟娌℃湁瀹炵幇瑙f瀽杈撳叆鐨勪唬鐮侊紝鍥犳绠楁湳琛ㄨ揪寮忓彧鑳介€氳繃纭紪鐮佹瀯閫犮€傛秹鍙婂埌缂栬瘧鍘熺悊鐨勭煡璇嗭紝涔﹀埌鐢ㄦ椂鏂规仺灏戯紝鍝庛€?/div> 3銆佹墍鏈夌殑鎿嶄綔鏁板唴閮ㄤ娇鐢╠ouble瀛樺偍銆?/div>

 

 

package com. lulix86 .calc ; import java. util .ArrayList ; import java. util .Deque ; import java. util .HashMap ; import java. util .Iterator ; import java. util .LinkedList ; import java. util .List ; import java. util .Map ; import java. util .regex . Matcher; import java. util .regex . Pattern; public class App { public static void main (String [] args ) { InfixExpression expression = new InfixExpression () ; // (1+8)-(3*(4-1)/) = 0 expression .append ( "(") ; expression .append ( "1") ; expression .append ( "+") ; expression .append ( "8") ; expression .append ( ")") ; expression .append ( "-") ; expression .append ( "(") ; expression .append ( "3") ; expression .append ( "*") ; expression .append ( "(") ; expression .append ( "4") ; expression .append ( "-") ; expression .append ( "1") ; expression .append ( ")") ; expression .append ( ")") ; System . out. println( "鍘熷琛ㄨ揪寮?" + expression ); try { System . out. println( "璁$畻缁撴灉鏄?" + expression. getResultValue () ) ; } catch (Exception e) { System . out. println( "涓€瀹氭槸琛ㄨ揪寮忚緭鍏ョ殑鏈夐棶棰橈紝璇锋鏌ュ悗閲嶈瘯" ) ; } } } /** * 琛ㄨ揪寮忓厓绱犵殑鍏埗绫汇€傝〃杈惧紡鍏冪礌鍏蜂綋鍒嗕负锛氳繍绠楃绫伙紝鎿嶄綔鏁扮被锛屽垎鐣岀绫汇€傚洜姝よ繖涓被鏈?涓瓙绫汇€?杩欐槸涓€涓娊璞$被銆?杩欎釜绫荤殑浣滅敤濡備笅锛? * 1銆佸畾涔変簡琛ㄨ揪寮忓厓绱犵殑鍏卞悓灞炴€э細String content锛岀敤鏉ュ瓨鍌ㄥ厓绱犵殑瀛楃涓插舰寮忕殑鍐呭銆? * 2銆侀檺瀹氫簡鍒嗙晫绗﹀厓绱犲拰杩愮畻绗﹀厓绱犵殑鐩稿叧鎬ц川锛氬鍙彇鐨刢ontent鍊硷紝杩愮畻绗︾殑浼樺厛绾х瓑銆? * 2銆佽繖涓被鎻愪緵浜嗕竴浜涗緵瀛愮被浣跨敤鐨勫伐鍏峰嚱鏁帮細isLegalXXXX銆? * * * @see ExpressionDelimeter * @see ExpressionOperator * @see ExpressionOperand * */ abstract class ExpressionElement { // -----------------------------鍒嗙晫绗?---------------------------------- // 琛ㄨ揪寮忎腑鐨勫垎鐣岀锛氬乏鍙冲渾鎷彿 public static final String LEFT_PARENTHESES = "(" ; public static final String RIGHT_PARENTHESES = ")" ; protected static boolean isLegalDelimeter (String content) { if ( LEFT_PARENTHESES .equals ( content) || RIGHT_PARENTHESES . equals( content )) return true ; return false ; } // -----------------------------杩愮畻绗?---------------------------------- // 杩愮畻绗?杩欓噷鍙敤鍒颁簡甯歌鐨勮繖4涓繍绠楃 public static final String PLUS = "+" ; public static final String MINUS = "-" ; public static final String MULTIPLE = "*" ; public static final String DIVIDE = "/" ; // 灏嗚繍绠楃 鍜?浠栫殑 浼樺厛绾?閫氳繃 k-v 瀵瑰瓨鏀惧埌 Map涓細杩愮畻绗︾殑浼樺厛绾у垎涓?涓瓑绾э紝鐢ㄦ暟瀛? 鍜?浠h〃锛屾暟鍊艰秺澶э紝浼樺厛绾ц秺楂?/span> protected static final Map operatorPiority = new HashMap (); static { operatorPiority .put ( PLUS, 1) ; operatorPiority .put ( MINUS, 1) ; operatorPiority .put ( MULTIPLE, 2) ; operatorPiority .put ( DIVIDE, 2) ; } protected static boolean isLegalOperator (String content) { if ( ! operatorPiority. containsKey (content )) return false ; return true ; } // -----------------------------鎿嶄綔鏁?---------------------------------- // 閫氳繃姝e垯琛ㄨ揪寮忔牎楠屼竴涓瓧绗︿覆鏄惁鏄悎娉曠殑鏁板瓧 銆?/span> protected static boolean isLegalOperand (String content) { Pattern numberPat = Pattern .compile ( "(\\+|-)?(\\d+\\.)?\\d+" ); Matcher mat = numberPat .matcher ( content) ; if ( ! mat. matches ()) return false ; return true ; } protected final String content ; protected ExpressionElement ( String content ) { this .content = content ; } public String getContent() { return content ; } @Override public String toString() { return content . toString() ; } } /** * 琛ㄨ揪寮忚繍绠楃绫汇€?鏋勯€犲嚱鏁扮鏈夛紝涓嶅彲浠ヨ嚜宸卞垱寤哄疄渚嬶紝鍙兘鐢ㄧ被涓瀹氫箟鐨?涓潤鎬佺被瀵硅薄锛屽垎鍒唬琛ㄤ簡鍔犲噺涔橀櫎4涓繍绠楃銆?绫诲璞′笉鍙彉銆? * 瀹炵幇浜咰omparable鎺ュ彛锛宑ompareTo鏂规硶鐢ㄦ潵姣旇緝2涓繍绠楃鐨勪紭鍏堢骇銆? * */ class ExpressionOperator extends ExpressionElement implements Comparable { public static final ExpressionOperator OP_MINUS = new ExpressionOperator (ExpressionElement . MINUS) ; public static final ExpressionOperator OP_PLUS = new ExpressionOperator (ExpressionElement . PLUS) ; public static final ExpressionOperator OP_MULTIPLE = new ExpressionOperator (ExpressionElement . MULTIPLE) ; public static final ExpressionOperator OP_DEVIDE = new ExpressionOperator (ExpressionElement . DIVIDE) ; // ----------------------------------------------------- private final int priority ; // 杩愮畻绗︾殑浼樺厛绾? // 涓嶅彲浠ュ湪绫诲瀹炰緥鍖栬繍绠楃锛屼笉鍏佽鍒涘缓鍏跺畠鐨勬柊鐨勮繍绠楃 private ExpressionOperator ( String content ) { super (content ) ; if ( ! isLegalOperator( content )) throw new IllegalArgumentException( "杩愮畻绗?" + content + " 涓嶆槸鍚堟硶鐨? ); this .priority = operatorPiority .get ( content) ; } public int getPriority() { return priority ; } @Override public int compareTo( ExpressionOperator other ) { return this . priority - other . priority; } @Override public boolean equals( Object obj ) { if ( obj == null) return false ; if ( obj == this) return true ; if ( obj .getClass () != this. getClass ()) return false ; ExpressionOperator other = ( ExpressionOperator) obj; return this . getContent() . equals( other .getContent ()) ; } } /** * 琛ㄨ揪寮忔搷浣滄暟绫汇€? * * 浣跨敤double浣滀负鏁板瓧鐨勫瓨鍌ㄧ被鍨嬨€?涓嶅彲鍙樼被鍨嬨€?瀹炵幇浜咰omparable鎺ュ彛锛宑ompareTo鏂规硶鐢ㄦ潵姣旇緝2涓搷浣滄暟鐨勫ぇ灏忋€? * * 鍥犱负鎿嶄綔鏁版槸涓嶅彲鏋氫妇鐨勶紝鍥犳杩欎釜绫诲彲浠ュ垱寤哄疄渚嬨€? */ class ExpressionOperand extends ExpressionElement implements Comparable { private final double value ; public ExpressionOperand ( String content ) { super (content ) ; try { value = Double. parseDouble (content ) ; } catch (NumberFormatException e) { throw new IllegalArgumentException( content + " 涓嶆槸涓€涓悎娉曠殑鏁板瓧" ); } } public ExpressionOperand ( double value ) { super (Double . toString( value )); this .value = value ; } public double getValue() { return value ; } @Override public int compareTo( ExpressionOperand other ) { return Double . compare( this .value , other . value) ; } @Override public String toString() { return Double . toString( this .value ) ; } } /** * 琛ㄨ揪寮忓垎鐣岀绫汇€?涓嶅彲鍙樼被鍨嬨€?鏋勯€犲嚱鏁扮鏈夛紝涓嶅彲浠ヨ嚜宸卞垱寤哄疄渚嬶紝鍙兘鐢ㄧ被涓瀹氫箟鐨?涓潤鎬佺被瀵硅薄锛屽垎鍒唬琛ㄥ乏锛屽彸鎷彿銆? * */ class ExpressionDelimeter extends ExpressionElement { public static final ExpressionDelimeter DM_LEFT_PARENTHESES = new ExpressionDelimeter ( ExpressionElement . LEFT_PARENTHESES) ; public static final ExpressionDelimeter DM_RIGHT_PARENTHESES = new ExpressionDelimeter ( ExpressionElement . RIGHT_PARENTHESES) ; private ExpressionDelimeter ( String content ) { super (content ) ; if ( ! isLegalDelimeter( content )) throw new IllegalArgumentException( "鍒嗙晫绗?" + content + " 涓嶆槸鍚堟硶鐨? ); } @Override public boolean equals( Object obj ) { if ( obj == null) return false ; if ( obj == this) return true ; if ( obj .getClass () != this. getClass ()) return false ; ExpressionDelimeter other = ( ExpressionDelimeter) obj ; return content . equals( other .content ) ; } } /** * 琛ㄨ揪寮忕被銆?浣犲彲浠ユ妸杩欎釜绫荤湅鍋氭槸涓€涓瓨鍌ㄨ〃杈惧紡鍏冪礌鐨勭嚎鎬ц〃锛屽洜姝ゅ彲浠ヤ娇鐢╝ppendXXX鏂规硶鏉ユ瀯閫犱竴涓〃杈惧紡銆? * * 灏佽浜嗗伐鍏峰嚱鏁?infixToSuffix锛岀敤浜庡皢涓紑琛ㄨ揪寮忚浆鎹负鍚庣紑琛ㄨ揪寮忋€? * 瀹炵幇浜?Iterable鎺ュ彛锛屽彲浠ヨ凯浠xpressionElement鍏冪礌瀵硅薄銆? */ abstract class Expression implements Iterable< ExpressionElement > { // --------------------------------------------------------------------------- // 浣跨敤ArrayList瀛樺偍琛ㄨ揪寮忓厓绱?/span> protected final List< ExpressionElement > expression = new ArrayList () ; // 杩藉姞涓€涓〃杈惧紡鍏冪礌瀵硅薄锛屼笉鍙互杩藉姞绌哄厓绱犮€?/span> public boolean append( ExpressionElement e ) { if ( e == null) return false ; expression .add ( e) ; return true ; } public boolean append( String content ) { switch ( content ) { case ExpressionElement . LEFT_PARENTHESES: expression .add ( ExpressionDelimeter. DM_LEFT_PARENTHESES ) ; break ; case ExpressionElement . RIGHT_PARENTHESES: expression .add ( ExpressionDelimeter. DM_RIGHT_PARENTHESES ) ; break ; case ExpressionElement . PLUS: expression .add ( ExpressionOperator. OP_PLUS ); break ; case ExpressionElement . MINUS: expression .add ( ExpressionOperator. OP_MINUS ); break ; case ExpressionElement . MULTIPLE: expression .add ( ExpressionOperator. OP_MULTIPLE ); break ; case ExpressionElement . DIVIDE: expression .add ( ExpressionOperator. OP_DEVIDE ); break ; default : try { ExpressionOperand operand = new ExpressionOperand (content ) ; // 鏋勯€犳椂浣跨敤浜唒arseDouble expression .add ( operand) ; } catch (Exception e) { return false ; } } return true ; } @Override public String toString() { boolean firstAdd = true ; StringBuilder sb = new StringBuilder () ; for ( ExpressionElement e : expression ) { if ( ! firstAdd) { sb .append ( " ") ; } else { firstAdd = false; } sb .append ( e. toString ()); } return sb . toString() ; } @Override public Iterator < ExpressionElement> iterator() { return expression . iterator() ; } public void clear() { this .expression . clear() ; } // 鑾峰彇琛ㄨ揪寮忔渶缁堢殑杩愮畻鐨勭粨鏋?/span> abstract double getResultValue() throws Exception ; } class SuffixExpression extends Expression { private double doPlus( ExpressionOperand a , ExpressionOperand b ) { return a . getValue() + b .getValue () ; } private double doMinus( ExpressionOperand a , ExpressionOperand b ) { return a . getValue() - b .getValue () ; } private double doMultiple( ExpressionOperand a , ExpressionOperand b ) { return a . getValue() * b .getValue () ; } private double doDevide( ExpressionOperand a , ExpressionOperand b ) { return a . getValue() / b .getValue () ; } // SuffixExpression 鏈韩宸茬粡鏄竴涓悗缂€琛ㄨ揪浜嗐€俫etResultValue璁$畻鍑虹粨鏋滃氨OK浜?/span> @Override double getResultValue () throws Exception { SimpleStack scalc = new SimpleStack () ; for ( ExpressionElement e : expression ) { if ( e instanceof ExpressionOperand) { scalc .push (( ExpressionOperand) e) ; } else if ( e instanceof ExpressionOperator ) { ExpressionOperator operator = ( ExpressionOperator) e; // 鑾峰彇杩欎釜杩愮畻绗?/span> ExpressionOperand opf = scalc .pop () ; // 寮瑰嚭浜屽厓杩愮畻绗︾殑绗簩涓搷浣滄暟 ExpressionOperand ops = scalc .pop () ; // 寮瑰嚭浜屽厓杩愮畻绗︾殑绗竴涓搷浣滄暟 ExpressionOperand temp = null ; // 瀛樺偍涓存椂杩愮畻缁撴灉 if ( opf == null || ops == null ) throw new Exception( "琛ㄨ揪寮忎笉鍚堟硶锛屼笉鑳藉畬鎴愯绠? ) ; if ( operator. equals (ExpressionOperator . OP_PLUS)) { temp = new ExpressionOperand (doPlus ( ops, opf)) ; } else if ( operator. equals (ExpressionOperator . OP_MINUS)) { temp = new ExpressionOperand (doMinus ( ops, opf)) ; } else if ( operator. equals (ExpressionOperator . OP_MULTIPLE)) { temp = new ExpressionOperand (doMultiple ( ops, opf)) ; } else if ( operator. equals (ExpressionOperator . OP_DEVIDE)) { temp = new ExpressionOperand (doDevide ( ops, opf)) ; } scalc .push ( temp) ; } // else if } // end foreach if ( scalc .size () != 1) throw new Exception( "琛ㄨ揪寮忎笉鍚堟硶锛屼笉鑳藉畬鎴愯绠? ) ; // 浠?scalc鏍堜腑鍙栧嚭鏈€鍚庝竴涓厓绱犲氨鏄粨鏋?/span> return scalc . pop() . getValue() ; } } class InfixExpression extends Expression { public SuffixExpression toSuffixExpression() { SuffixExpression suffix = new SuffixExpression () ; // suffix鏄竴涓敤鏉ュ瓨鍌ㄨ〃杈惧紡鍏冪礌鐨勭嚎鎬ц〃瀵硅薄锛屽搴旂畻娉曚腑鐨凩 SimpleStack sop = new SimpleStack () ; // sop 鏍? // 閬嶅巻鍘熷琛ㄨ揪寮忎腑鐨勬瘡涓€涓厓绱?/span> for ( ExpressionElement e : expression ) { if ( e instanceof ExpressionOperand) // 濡傛灉鏄搷浣滄暟锛屽垯鐩存帴杩藉姞鍒板悗缂€琛ㄨ揪寮弒uffix涓?/span> { suffix .append ( e) ; } else if ( e instanceof ExpressionDelimeter ) // 濡傛灉鏄垎鐣岀 { if ( e. equals (ExpressionDelimeter . DM_LEFT_PARENTHESES )) // 鏄?宸︽嫭鍙?鍒欑洿鎺ュ帇鏍?/span> { sop .push ( e) ; } else if ( e. equals (ExpressionDelimeter . DM_RIGHT_PARENTHESES )) // 鏄?鍙虫嫭鍙凤紝鍒欎粠 sop涓脊鍑轰笌杩欎釜鎷彿閰嶅鐨勪腑闂寸殑鎵€鏈夊厓绱狅紝 { // 骞惰拷鍔犲埌鍚庣紑琛ㄨ揪寮忎腑 while ( ! sop. isEmpty () && ! sop. peek (). equals (ExpressionDelimeter . DM_LEFT_PARENTHESES )) { suffix .append ( sop. pop ()); // 灏嗗厓绱犲嚭鏍堬紝杩藉姞鍒?suffix 琛ㄤ腑鍘?/span> } if ( ! sop. isEmpty ()) { sop .pop () ; // 灏嗘爤椤剁殑( 鍑烘爤锛屼涪寮冦€?/span> } } } else if ( e instanceof ExpressionOperator ) // 濡傛灉鏄繍绠楃 { while ( ! sop. isEmpty () && sop . peek() instanceof ExpressionOperator && 0 >= (( ExpressionOperator) e ). compareTo ((ExpressionOperator ) sop . peek())) { suffix .append ( sop. pop ()); } sop .push ( e) ; } } // end of foreach // 灏?sop鏍堜腑鍓╀綑鐨勫厓绱犲叏閮ㄨ拷鍔犲埌suffix鍚?/span> while ( ! sop. isEmpty ()) { suffix .append ( sop. pop ()); } return suffix ; } @Override double getResultValue () throws Exception { return toSuffixExpression () .getResultValue () ; } } /** * * 鍥犱负Java闆嗗悎妗嗘灦涓殑Stack绫绘槸绾跨▼瀹夊叏鐨勶紝 浣嗘槸杩欓噷涓嶉渶瑕佽繖绉嶇壒鎬э紝涓轰簡鎻愰珮鏁堢巼锛屼娇鐢ㄥ弻绔槦鍒椾綔涓哄唴閮ㄥ疄鐜帮紝鑷繁灏佽鎴愪负涓€涓爤鏁版嵁缁撴瀯銆? * * @see java.util.Stack * @see java.util.Deque * @see java.util.LinkedList */ class SimpleStack < E> { private final Deque< E > deque = new LinkedList < E> (); public E pop() { return deque . pop() ; // 鍙岀闃熷垪鐨勭涓€涓厓绱狅紝涔熷氨鏄爤鐨勬爤椤?/span> } public E peek() { return deque . peek() ; } public void push( E e ) { deque .push ( e) ; // 鍘嬫爤 } public int size() { return deque . size() ; } public boolean isEmpty() { return 0 == deque .size () ; } @Override public String toString() { StringBuilder sb = new StringBuilder () ; sb .append ( "鏍堥《[") ; for ( E e : deque) { sb .append ( e. toString () + "," ) ; } sb .append ( "]鏍堝簳") ; return sb. toString (); } }

 

 

 娆㈣繋杞浇锛岃娉ㄦ槑鍑哄锛歸ww.cnblogs.com/lulipro

 涓轰簡鑾峰緱鏇村ソ鐨勯槄璇讳綋楠岋紝璇疯闂師鍗氬鍦板潃銆?/p>

闄愪簬鏈汉姘村钩锛屽鏋滄枃绔犲拰浠g爜鏈夎〃杩颁笉褰撲箣澶勶紝杩樿涓嶅悵璧愭暀銆?/p>

 

浠g爜閽㈢惔瀹?/p>



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有