20155330 第十一周课堂练习(20170503)

20155330 第十一周课堂练习(20170503)

一、代码检查-P74

修改教材P74一行代码NineNineTable.java,让执行结果是个三角形:

码云链接

public class Nine {
    public static void main(String[] args) {
        for(int i=1;i<=9;i++){
            for (int j = 1; j <=i ; j++)
            {
                System.out.printf("%d*%d=%2d\t",i,j,i*j);
            }
            System.out.println();
        }
    }
}

二、迷你直流

提交测试截图和码云练习项目链接,实现Linux下dc的功能,计算后缀表达式的值

码云链接

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()).intValue();
                op1 = (stack.pop()).intValue();
                result = evalSingleOp(token.charAt(0), op1, op2);
                stack.push(new Integer(result));
                //从栈中弹出操作数2
                //从栈中弹出操作数1
                //根据运算符和两个操作数调用evalSingleOp计算result;
                //计算result入栈;
            } else
                stack.push(new Integer(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;
            break;
        }
        return result;
    }
}
import java.util.Scanner;
public class MyDCTest {
    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");
        }
    }
}
posted @ 2017-05-03 21:44  20155330  阅读(105)  评论(0编辑  收藏  举报