计算后缀表达式
来源:互联网 发布:北京软件开发学校 编辑:程序博客网 时间:2024/06/05 08:55
package stack;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Stack;/* * 计算后缀表达式的值 * 如下6,5,2,3,+,8,*,+,3,+,* * 2,1,+,4,* * 4,13,5,/,+,10,* */public class Test {public static void main(String[] args) {System.out.println("请输入后缀表达式(字符间以英文都好隔开):");BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));String str=null;try {str=reader.readLine();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}String[] ss=str.split(",");postfixExpression(ss);}public static void postfixExpression(String[] ss){int value=0;//计算值StringBuilder sb=new StringBuilder();//保存表达式boolean flag=false;//String[] ss={"2","1","+","4","*"}; //String[] ss={"4","13","5","/","+","10","*"};Stack<String> newStack=new Stack<String>();//用栈来保存表达式元素for(String s:ss){ if(validate(s)){//是否是运算符 String s1=newStack.pop();//是的话出栈两个元素 String s2=newStack.pop(); value=operator(s1, s2, s);//两位数运算 if(sb.length()>0){ //取最后一位字符,判断是否是) String lastSb=sb.substring(sb.length()-1); if(lastSb.equals(")")){ if(flag){//判断计算后代值入栈是栈内是否还有元素 sb.insert(0, "("+s2+s);//加到字符串开头 sb.append(")"); }else{ sb.insert(0, "("); sb.append(s+s1+")");//加到末尾 } flag=false; }else{ sb.append("("+s2+s+s1+")"); } }else{ sb.append("("+s2+s+s1+")"); } if(newStack.size()>0){ flag=true; } newStack.push(String.valueOf(value)); }else{ newStack.push(s); }}System.out.println(sb.toString()+"="+value);}public static boolean validate(String s){boolean flag=false;if(s.equals("+")){flag=true;}else if(s.equals("-")){flag=true;}else if(s.equals("*")){flag=true;}else if(s.equals("/")){flag=true;}return flag;} public static int operator(String s1,String s2,String operator){ int num=0; int num1=Integer.valueOf(s1);int num2=Integer.valueOf(s2);switch(operator){ case "+": num=num2+num1; break; case "*": num=num2*num1; break; case "-": num=num2-num1; break; case "/": num=num2/num1; break;} return num; }}
http://blog.csdn.net/xdkb159/article/details/73848939
阅读全文
0 0
- 计算后缀表达式
- 计算后缀表达式
- 后缀表达式计算
- sicily 后缀表达式计算
- 后缀表达式计算
- 后缀表达式的计算
- 后缀表达式的计算
- 后缀表达式计算
- 后缀表达式计算
- 后缀表达式的计算
- 计算后缀表达式
- 后缀表达式计算结果
- 后缀表达式计算
- 后缀表达式的计算
- 后缀表达式的计算
- 1005. 后缀表达式计算
- 1005. 后缀表达式计算
- 后缀表达式的计算
- 1002. 等价二叉树
- intellij +maven + jetty实现热部署
- 操作系统字节顺序表示
- 各种设计模式DEMO,完善中...
- ScrollView嵌套ListView
- 计算后缀表达式
- RSA加密解密
- TypeScript 泛型<T>使用整理
- redis集群实战
- Thymeleaf 常用属性
- 【重新入门数位Dp】Hdu 2089 不要62【记忆化搜索写法】数位Dp
- 透传模式(透明传输SeriaNet)详解
- compass安装报错
- Nginx安装及管理