您好,登錄后才能下訂單哦!
什么是中序表達式
前序(前綴)表達式要求每一個操作符出現在其操作數之前.一般不用. 寫表達式的后序表達式一般是為了便利于計算機編程中棧的實現,所以用的較多.
具體代碼如下所示:
package 表達式求值; import java.util.Stack; /* * 中序表達式求值實現 */ 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++){ //循環將表達式依次入棧 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")); } }
總結
以上所述是小編給大家介紹的Java實現中序表達式的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。