字首/中綴/字尾表示式;
阿新 • • 發佈:2020-08-08
字首字尾中綴表示式:
字尾表示式的程式碼實現:
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; } }