1. 程式人生 > 實用技巧 >字首/中綴/字尾表示式;

字首/中綴/字尾表示式;

字首字尾中綴表示式:

字尾表示式的程式碼實現:

package Demo1.stackArray;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Stack;

public class PolandNocation {
    //字尾表示式:逆波蘭表示式
    public static void main(String[] args) {
        //建立一個表示式(3+4)*5-6 = 29
        String suffixExpression = "3 4 + 5 * 6 -";

        
for (int i = 0; i < suffixExpression.length(); i++) { } //切割表示式,存入集合 PolandNocation polandNocation = new PolandNocation(); List<String> list = polandNocation.getArray(suffixExpression); // list.forEach(System.out::print); System.out.println(list);
//計算 System.out.println(); try { int calculate = polandNocation.calculate(list); System.out.println("計算的結果是:--》" + calculate); } catch (Exception e) { System.out.println(e.getMessage()); } finally { System.out.println("退出"); } }
//壓棧 public int calculate(List<String> lis) { //構建一個棧 Stack<String> stack = new Stack<>(); for (String item : lis) { if (item.matches("\\d+")) {//匹配多位數 stack.push(item); } else { int num2 = Integer.parseInt(stack.pop()); int num1 = Integer.parseInt(stack.pop()); int result = 0; if (item.equals("+")) { result = num1 + num2; } else if (item.equals("-")) { result = num1 - num2; } else if (item.equals("*")) { result = num1 * num2; } else if (item.equals("/")) { result = num1 / num2; } else { throw new RuntimeException("運算子!!!異常"); } stack.push("" + result); } } return Integer.parseInt(stack.pop()); } //切割字串(),存入集合(ArrayList) public List<String> getArray(String suffixExpression) { //把資料切割裝入ArrayList ArrayList<String> arrayList = new ArrayList<>(); String[] split = suffixExpression.split(" "); for (String number : split) { arrayList.add(number); } return arrayList; } }