Java實現(xiàn)中序表達式的實例代碼
什么是中序表達式
前序(前綴)表達式要求每一個操作符出現(xiàn)在其操作數(shù)之前.一般不用. 寫表達式的后序表達式一般是為了便利于計算機編程中棧的實現(xiàn),所以用的較多.
具體代碼如下所示:
package 表達式求值;
import java.util.Stack;
/*
* 中序表達式求值實現(xiàn)
*/
public class CenterExpression {
public double evaluate(String expression){ //傳入中序表達式
char [] ex = expression.toCharArray();
Stack<Double> num = new Stack<>();
Stack<Character> ops = new Stack<>();
for(int i = 0; i < ex.length; i++){ //循環(huán)將表達式依次入棧
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()){ //處理剩余可以按計算機掃描順序處理的表達式
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實現(xiàn)中序表達式的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
SpringBoot+Netty+WebSocket實現(xiàn)消息發(fā)送的示例代碼
這篇文章主要介紹了SpringBoot+Netty+WebSocket實現(xiàn)消息發(fā)送的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09
Mybatis使用useGeneratedKeys獲取自增主鍵的方法
這篇文章主要給大家介紹了關(guān)于Mybatis使用useGeneratedKeys獲取自增主鍵的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Mybatis具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-09-09
SpringBoot2 實現(xiàn)JPA分頁和排序分頁的案例
這篇文章主要介紹了SpringBoot2 實現(xiàn)JPA分頁和排序分頁的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
Spring Boot統(tǒng)一異常攔截實踐指南(最新推薦)
本文介紹了Spring Boot中統(tǒng)一異常處理的重要性及實現(xiàn)方案,包括使用`@ControllerAdvice`和`@ExceptionHandler`注解,實現(xiàn)全局異常處理和統(tǒng)一響應格式,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧2025-02-02
解決java.lang.IllegalArgumentException異常問題
這篇文章主要介紹了解決java.lang.IllegalArgumentException異常問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04
springboot + jpa實現(xiàn)刪除數(shù)據(jù)的操作代碼
這篇文章主要介紹了springboot + jpa實現(xiàn)刪除數(shù)據(jù)的操作代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-05-05

