代码改变世界

第四次作业

2015-10-24 21:42  向日葵luck  阅读(149)  评论(1编辑  收藏  举报

随着第三次作业的完成我又开始做第四次作业,依然是结对编程,一次次的作业让我对合作有了更重要的认识,话不多说开始工作。

需求分析:输入0到10完成四则运算,用户输入一个数完成加减乘除,要求数随机生成......判断答题正确率

代码部分

    import java.util.Stack;  
    
    public class Operate {      
        private Stack<Character> priStack = new Stack<Character>();      
        private Stack<Integer> numStack = new Stack<Integer>();;         
        public int caculate(String str) {      
             
            String temp;
           
            StringBuffer tempNum = new StringBuffer();
            StringBuffer string = new StringBuffer().append(str);
          
            while (string.length() != 0) {      
                temp = string.substring(0, 1);      
                string.delete(0, 1);      
               
                if (!isNum(temp)) {      
                   
                    if (!"".equals(tempNum.toString())) {      
                       
                        int num = Integer.parseInt(tempNum.toString());      
                        numStack.push(num);  
                        tempNum.delete(0, tempNum.length());      
                    }      
                   
                    while (ompare(temp.charAt(0)) && (!priStack.empty())) {   
                        int a = (int) numStack.pop();
                        int b = (int) numStack.pop();
                        char ope = priStack.pop();      
                        int result = 0;    
                        switch (ope) {      
                        
                        case '+':      
                            result = b + a;      
                           
                            numStack.push(result);      
                            break;      
                        case '-':      
                            result = b - a;      
                            
                            numStack.push(result);      
                            break;      
                        case '*':      
                            result = b * a;      
                           
                            numStack.push(result);      
                            break;      
                        case '/':      
                            result = b / a;    
                            numStack.push(result);      
                            break;      
                        }      
          
                    }      
                          
                    if (temp.charAt(0) != '#') {      
                        priStack.push(new Character(temp.charAt(0)));      
                        if (temp.charAt(0) == ')') {      
                            priStack.pop();      
                            priStack.pop();      
                        }      
                    }      
                } else      
                          
                    tempNum = tempNum.append(temp);      
            }      
            return numStack.pop();      
        }      
          
          
        private boolean isNum(String temp) {      
            return temp.matches("[0-9]");      
        }      
          
          
        private boolean compare(char str) {      
            if (priStack.empty()) {      
                     
                return true;      
            }      
            char last = (char) priStack.lastElement();      
                  
            if (last == '(') {      
                return true;      
            }      
            switch (str) {      
            case '#':      
                return false;      
            case '(':      
                      
                return true;      
            case ')':      
                     
                return false;      
            case '*': {      
                     
                if (last == '+' || last == '-')      
                    return true;      
                else      
                    return false;      
            }      
            case '/': {      
                if (last == '+' || last == '-')      
                    return true;      
                else      
                    return false;      
            }      
                      
            case '+':      
                return false;      
            case '-':      
                return false;      
            }      
            return true;      
        }      
          
        public static void main(String args[]) {      
            Operate operate = new Operate();      
            int t = operate.caculate("(3+4*(4*10-10/2)#");        
            System.out.println(t);      
        }      
          
    }      

 我的编程小伙伴:lmxhappy   姓名:吕明霞  学号:1033 

总结:代码很耗时,同时很费脑子,但是只要加紧练习不抱怨端正学习态度,就能学好。