zoukankan      html  css  js  c++  java
  • java四则运算

      最近老师要写四则运算,通过自己的理解终于完成了,绝对是最容易懂的四则运算!
      首先将运算式分解长一个一个的字符串再加入到一个队列里面,再建立两个站,一个用来存储运算数,一个存放运算符,其中比较运算符的关系是关键,如果栈顶元素优先级底,则从队列里面得到的运算符会直接进栈,如果相等则是要消除(),大于就是要进行出栈运算,将结果再加入到运算数栈中去,直到得到运算符栈中为#和list为空为止。
      github地址:https://github.com/ICanV/EvaluateExpression

      上代码:
    package demo2; import java.util.ArrayList; import java.util.List; import java.util.Stack; public class EvaluateExpression { public static void main(String[] args) { String s="(3*2+(20-12))/2+(2+3)"; EvaluateExpression e=new EvaluateExpression (); System.out.println("计算结果为:"+e.Evaluate(e. makeList(s))); } public List<String> makeList(String str){ List<String> list = new ArrayList<String>(); String temp=""; for(int i=0;i<str.length();i++){ char ch=str.charAt(i); //判断是否为数字 if (Character.isDigit(ch)) { temp+=String.valueOf(ch); }else{ if(!temp.equals("")){ list.add(temp); } list.add(String.valueOf(ch)); temp=""; } } if(!temp.equals("")){ list.add(temp); } list.add("#"); return list; } public String compare(String str1,String str2){ switch(str1){ case "+": if(str2.equals("+")) return ">"; if(str2.equals("-")) return ">"; if(str2.equals("*")) return "<"; if(str2.equals("/")) return "<"; if(str2.equals("(")) return "<"; if(str2.equals(")")) return ">"; if(str2.equals("#")) return ">"; break; case "-": if(str2.equals("+")) return ">"; if(str2.equals("-")) return ">"; if(str2.equals("*")) return "<"; if(str2.equals("/")) return "<"; if(str2.equals("(")) return "<"; if(str2.equals(")")) return ">"; if(str2.equals("#")) return ">"; break; case "*": if(str2.equals("+")) return ">"; if(str2.equals("-")) return ">"; if(str2.equals("*")) return ">"; if(str2.equals("/")) return ">"; if(str2.equals("(")) return "<"; if(str2.equals(")")) return ">"; if(str2.equals("#")) return ">"; break; case "/": if(str2.equals("+")) return ">"; if(str2.equals("-")) return ">"; if(str2.equals("*")) return ">"; if(str2.equals("/")) return ">"; if(str2.equals("(")) return "<"; if(str2.equals(")")) return ">"; if(str2.equals("#")) return ">"; break; case "(": if(str2.equals("+")) return "<"; if(str2.equals("-")) return "<"; if(str2.equals("*")) return "<"; if(str2.equals("/")) return "<"; if(str2.equals("(")) return "<"; if(str2.equals(")")) return "="; if(str2.equals("#")) return ">"; break; case ")": if(str2.equals("+")) return ">"; if(str2.equals("-")) return ">"; if(str2.equals("*")) return ">"; if(str2.equals("/")) return ">"; if(str2.equals(")")) return ">"; if(str2.equals("#")) return ">"; break; case "#": if(str2.equals("+")) return "<"; if(str2.equals("-")) return "<"; if(str2.equals("*")) return "<"; if(str2.equals("/")) return "<"; if(str2.equals("(")) return "<"; break; } return null; } public boolean isHave(String s){ String[] strs={"+","-","*","/","(",")","#"}; for(int i=0;i<strs.length;i++){ if(strs[i].indexOf(s)!=-1){ return true; } } return false; } public String Evaluate(List<String> list){ Stack<String> stack0=new Stack<String>();//运算数栈 Stack<String> stack1=new Stack<String>();//运算符栈 stack1.push("#"); String str=list.remove(0); while((!stack1.peek().equals("#")) || (!list.isEmpty())){ if(!this.isHave(str)){ stack0.push(str); str=list.remove(0); }else{ String str1=this.compare(stack1.peek(), str); switch(str1){ case "<": stack1.push(str); str=list.remove(0); break; case "=": stack1.pop(); str=list.remove(0); break; case ">": String ch=stack1.pop(); int result=0; int ch1=Integer.parseInt(stack0.pop()); int ch0=Integer.parseInt(stack0.pop()); if(ch.equals("+")) result=ch0+ch1; if(ch.equals("-")) result=ch0-ch1; if(ch.equals("*")) result=ch0*ch1; if(ch.equals("/")) result=ch0/ch1; stack0.push(String.valueOf(result)); break; } } } return stack0.peek(); } }
    运算结果截图:

    版权声明:本文为博主原创文章,转载请声明。

    
    

      

  • 相关阅读:
    经济--股票--深圳指数基金
    经济--年终奖理财攻略
    经济--股票--基金经理打死不肯说的赚钱黑幕
    经济--股票--基金定投
    经济--股票--基金分类的三个角度
    经济学--股票--必胜法则
    经济--降息对股市是好消息还是坏消息?
    PHP数组的排序函数
    使用回调函数处理数组的函数
    统计数组元素的个数和唯一性的函数
  • 原文地址:https://www.cnblogs.com/liupeixuan/p/7531287.html
Copyright © 2011-2022 走看看