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(); } }
    运算结果截图:

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

    
    

      

  • 相关阅读:
    HDU 1075 What Are You Talking About(字典树)
    HDU 1075 What Are You Talking About (stl之map映射)
    HDU 1247 Hat’s Words(字典树活用)
    字典树HihoCoder
    HDU 1277全文检索(字典树)
    HDU 3294 Girls' research(manachar模板题)
    HDU 3294 Girls' research(manachar模板题)
    HDU 4763 Theme Section(KMP灵活应用)
    Ordering Tasks UVA
    Abbott's Revenge UVA
  • 原文地址:https://www.cnblogs.com/liupeixuan/p/7531287.html
Copyright © 2011-2022 走看看