20155201 第十一周Java课堂实践

一、表达式后缀表达式:

a b x c d e / - f x +

二、mini dc

MyDC.java

import java.util.StringTokenizer;
import java.util.Stack;

public class MyDC {
    /**

     * constant for addition symbol

     */
    private final char ADD = '+';
    /**

     * constant for subtraction symbol

     */
    private final char SUBTRACT = '-';
    /**

     * constant for multiplication symbol

     */
    private final char MULTIPLY = '*';
    /**

     * constant for division symbol

     */
    private final char DIVIDE = '/';
    /**

     * the stack

     */
    private Stack<Integer> stack;

    public MyDC() {
        stack = new Stack<Integer>();
    }

    public int evaluate(String expr) {
        int op1, op2, result = 0;
        String token;
        StringTokenizer tokenizer = new StringTokenizer(expr);

        while (tokenizer.hasMoreTokens()) {
            token = tokenizer.nextToken();

            //如果是运算符,调用isOperator

            if (isOperator(token)) {
                op2=stack.pop();//从栈中弹出操作数2

                op1=stack.pop();//从栈中弹出操作数1

                result=evalSingleOp(token.charAt(0),op1,op2);//根据运算符和两个操作数调用evalSingleOp计算result;

                stack.push(result);//计算result入栈;

            } else//如果是操作数

            stack.push(Integer.parseInt(token));//操作数入栈;

        }

        return result;
    }

    private boolean isOperator(String token) {
        return (token.equals("+") || token.equals("-") ||
                token.equals("*") || token.equals("/"));
    }

    private int evalSingleOp(char operation, int op1, int op2) {
        int result = 0;

        switch (operation) {
            case ADD:
                result = op1 + op2;
                break;
            case SUBTRACT:
                result = op1 - op2;
                break;
            case MULTIPLY:
                result = op1 * op2;
                break;
            case DIVIDE:
                result = op1 / op2;
        }

        return result;
    }
}

MyDCTester.java

import java.util.Scanner;

public class MyDCTester {

    public static void main(String[] args) {

        String expression, again;
        int result;

        try {
            Scanner in = new Scanner(System.in);

            do {
                MyDC evaluator = new MyDC();
                System.out.println("Enter a valid postfix expression: ");
                expression = in.nextLine();

                result = evaluator.evaluate(expression);
                System.out.println();
                System.out.println("That expression equals " + result);

                System.out.print("Evaluate another expression [Y/N]? ");
                again = in.nextLine();
                System.out.println();
            }
            while (again.equalsIgnoreCase("y"));
        } catch (Exception IOException) {
            System.out.println("Input exception reported");
        }
    }
}

截图:
1065407-20170503203648898-1445805782.png

转载于:https://www.cnblogs.com/zhuohua/p/6803767.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值