對於一個帶有括號的算數表達式來說,麻煩的點在於對於括號的處理,在這裏我們使用兩個棧分別存儲運算符和數值然後再對於相應的情況進行處理。
簡單方便起見我們假設表達式中沒有省略任何括號。
對於表達式我們根據四種情況從左到右送入棧中:
1.將操作數送入操作數棧。
2.將運算符壓入運算棧。
3.忽略左括號
4.遇到右括號時,彈出相應運算符合所需運算數,將其結果壓入操作數棧中
其核心代碼如下:
- package demo2;
- import java.util.Scanner;
- import java.util.Stack;
- /**
- * @description:
- * @author: zhonghu
- * @date: 2019-02-10 15:29
- */
- public class Evaluate {
- public static void main(String[] args) {
- //ops棧存放操作數
- Stack ops=new Stack<>();
- //vals棧存放數
- Stack vals=new Stack<>();
- Scanner sc=new Scanner(System.in);
- System.out.println("請輸出表達式");
- String str=sc.nextLine();
- String[] ch=str.split("");
- for(int i=0;i