1. 程式人生 > >java四則運算

java四則運算

str1 ger 比較運算 stat com urn 字符 技術分享 nbsp

  最近老師要寫四則運算,通過自己的理解終於完成了,絕對是最容易懂的四則運算!
  首先將運算式分解長一個一個的字符串再加入到一個隊列裏面,再建立兩個站,一個用來存儲運算數,一個存放運算符,其中比較運算符的關系是關鍵,如果棧頂元素優先級底,則從隊列裏面得到的運算符會直接進棧,如果相等則是要消除(),大於就是要進行出棧運算,將結果再加入到運算數棧中去,直到得到運算符棧中為#和list為空為止。
  上代碼:
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(); } }
運算結果截圖:

技術分享

版權聲明:本文為博主原創文章,轉載請聲明。



  

java四則運算