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)文章
MyBatis一對(duì)一級(jí)聯(lián)更新問題小結(jié)
日常工作中經(jīng)常會(huì)涉及到一對(duì)一級(jí)聯(lián)更新的問題,本文主要介紹了MyBatis一對(duì)一級(jí)聯(lián)更新問題小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
SpringBoot+Netty+WebSocket實(shí)現(xiàn)消息發(fā)送的示例代碼
這篇文章主要介紹了SpringBoot+Netty+WebSocket實(shí)現(xiàn)消息發(fā)送的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Mybatis使用useGeneratedKeys獲取自增主鍵的方法
這篇文章主要給大家介紹了關(guān)于Mybatis使用useGeneratedKeys獲取自增主鍵的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
SpringBoot2 實(shí)現(xiàn)JPA分頁(yè)和排序分頁(yè)的案例
這篇文章主要介紹了SpringBoot2 實(shí)現(xiàn)JPA分頁(yè)和排序分頁(yè)的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01
Spring Boot統(tǒng)一異常攔截實(shí)踐指南(最新推薦)
本文介紹了Spring Boot中統(tǒng)一異常處理的重要性及實(shí)現(xiàn)方案,包括使用`@ControllerAdvice`和`@ExceptionHandler`注解,實(shí)現(xiàn)全局異常處理和統(tǒng)一響應(yīng)格式,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-02-02
解決java.lang.IllegalArgumentException異常問題
這篇文章主要介紹了解決java.lang.IllegalArgumentException異常問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
springboot + jpa實(shí)現(xiàn)刪除數(shù)據(jù)的操作代碼
這篇文章主要介紹了springboot + jpa實(shí)現(xiàn)刪除數(shù)據(jù)的操作代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-05-05

