计算后缀表达式

来源:互联网 发布:北京软件开发学校 编辑:程序博客网 时间: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

原创粉丝点击