Java實(shí)現(xiàn)中序表達(dá)式的實(shí)例代碼
什么是中序表達(dá)式
前序(前綴)表達(dá)式要求每一個(gè)操作符出現(xiàn)在其操作數(shù)之前.一般不用. 寫表達(dá)式的后序表達(dá)式一般是為了便利于計(jì)算機(jī)編程中棧的實(shí)現(xiàn),所以用的較多.
具體代碼如下所示:
package 表達(dá)式求值; import java.util.Stack; /* * 中序表達(dá)式求值實(shí)現(xiàn) */ public class CenterExpression { public double evaluate(String expression){ //傳入中序表達(dá)式 char [] ex = expression.toCharArray(); Stack<Double> num = new Stack<>(); Stack<Character> ops = new Stack<>(); for(int i = 0; i < ex.length; i++){ //循環(huán)將表達(dá)式依次入棧 char c = ex[i]; if(c < '9' && c > '0'){ num.push(Double.parseDouble(Character.toString(c))); } else if(c == '('){ ops.push('('); } else if(c == ')'){ while(true){ char op = ops.pop(); if(op == '('){ break; } else{ switch(op){ case '+':num.push(num.pop()+num.pop());break; case '-':num.push(num.pop()-num.pop());break; case '*':num.push(num.pop()*num.pop());break; case '/':num.push(num.pop()/num.pop());break; default:break; } } } } else if(ops.empty() && (c == '+' || c == '-' || c == '*' || c == '/')){ ops.push(c); } else if(!ops.isEmpty() && (c == '+' || c == '-' || c == '*' || c == '/')){ char op =ops.peek(); while((op == '*' || op == '/') && (c == '+' || c == '-')){ op = ops.pop(); switch(op){ case '+':num.push(num.pop()+num.pop());break; case '-':num.push(num.pop()-num.pop());break; case '*':num.push(num.pop()*num.pop());break; case '/':num.push(num.pop()/num.pop());break; default:break; } if(ops.isEmpty()){ break; } else{ op = ops.peek(); } } ops.push(c); } } while(!ops.isEmpty()){ //處理剩余可以按計(jì)算機(jī)掃描順序處理的表達(dá)式 char op =ops.pop(); switch(op){ case '+':num.push(num.pop()+num.pop());break; case '-':num.push(num.pop()-num.pop());break; case '*':num.push(num.pop()*num.pop());break; case '/':num.push(num.pop()/num.pop());break; default:break; } } return num.pop(); } public static void main(String [] args){ CenterExpression exp = new CenterExpression(); System.out.println(exp.evaluate("1*2+5*3")); } }
總結(jié)
以上所述是小編給大家介紹的Java實(shí)現(xiàn)中序表達(dá)式的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
SpringBoot?整合MyBatis+MyBatis-Plus+MyBatisX插件使用
本文主要介紹了SpringBoot?整合MyBatis+MyBatis-Plus+MyBatisX插件使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-04-04jdk-logging?log4j?logback日志系統(tǒng)實(shí)現(xiàn)機(jī)制原理介紹
這篇文章主要介紹了jdk-logging、log4j、logback日志介紹以及三個(gè)日志系統(tǒng)的實(shí)現(xiàn)機(jī)制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03Java源碼解析HashMap的tableSizeFor函數(shù)
今天小編就為大家分享一篇關(guān)于Java源碼解析HashMap的tableSizeFor函數(shù),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01Springboot @Configuration與自動(dòng)配置詳解
這篇文章主要介紹了SpringBoot中的@Configuration自動(dòng)配置,在進(jìn)行項(xiàng)目編寫前,我們還需要知道一個(gè)東西,就是SpringBoot對(duì)我們的SpringMVC還做了哪些配置,包括如何擴(kuò)展,如何定制,只有把這些都搞清楚了,我們?cè)谥笫褂貌艜?huì)更加得心應(yīng)手2022-07-07用java實(shí)現(xiàn)的獲取優(yōu)酷等視頻縮略圖的實(shí)現(xiàn)代碼
想獲取優(yōu)酷等視頻縮略圖,在網(wǎng)上沒有找到滿意的資料,參考了huangdijia的PHP版工具一些思路,寫了下面的JAVA版代碼。。其實(shí)也可以做成JS版的2013-05-05