• 20172307 结对编程项目-四则运算 第二周 阶段总结


    20172307 结对编程项目-四则运算 第二周 阶段总结

    (结队项目码云地址)

    相关过程截图(关键代码处加了注释)

    • 编写出实现中缀转后缀的类Transform
         /*
         Transform.java      作者:赵晓海  黄宇瑭
         用于将一个中缀表达式转换为对应的后缀表达式
          */
         import java.util.Stack;
    
         public class Transform {
             String former;//中缀表达式
    
             String last;//后缀表达式
    
             //构造函数
            public Transform(String former){
                 this.former=former;
                 last="";
             }
             //得到后缀表达式的方法
             public String getLast() {
                 return last;
             }
    
             //将中缀表达式转为后缀表达式的方法
             public void transform(){
                // int length=(former.length()+1)/2;
                 //StringTokenizer toArraylist=new StringTokenizer(former);
    
                 String []str1=former.split("\s");
    
                 /*int num1=0;
                 while (toArraylist.hasMoreTokens()){
                     str1[num1]=toArraylist.nextToken();
                     num1++;
                 }*/
                 String [] str2=new String[str1.length-1];
                 for (int a=0;a<str1.length-1;a++)
                     str2[a]=str1[a];
    
                 Stack stack=new Stack();
                 int num2=0;
                 while (num2<str2.length){
                     if(str2[num2].equalsIgnoreCase("+")==false&&str2[num2].equalsIgnoreCase("-")==false&&str2[num2].equalsIgnoreCase("×")==false&&str2[num2].equalsIgnoreCase("÷")==false)
                         last+=str2[num2]+" ";
                     else
                         if (stack.empty()==true)
                             stack.push(str2[num2]);
                         else
                              if ((stack.peek().equals("+")==true||stack.peek().equals("-")==true)&&(str2[num2].equalsIgnoreCase("×")||str2[num2].equalsIgnoreCase("÷")))
                                  stack.push(str2[num2]);
                              else {
                                  last+=stack.peek()+" ";
                                  stack.pop();
                                  stack.push(str2[num2]);
                              }
                              num2++;
                 }
                 while (stack.empty()==false){
                     last+= stack.peek()+" ";
                     stack.pop();
                 }
    
             }
     }
    
    • 测试Transform
         /*
        TransformTest.java       作者:赵晓海  黄宇瑭
        Transform类的驱动类
         */
    
        public class TransformTest {
            public static void main(String[] args) {
                Transform a =new Transform("22 + 10/3 ÷ 1/10 =");
                a.transform();//使用将中缀表达式转为后缀表达式的方法
                System.out.println(a.getLast());
            }
        }
    

    • 编写出计算后缀表达式值的类Calculate
           /*
        Calculate.java         作者:赵晓海  黄宇瑭
        用于计算一个后缀表达式
         */
        import eg.RationalNumber;
    
        import java.util.Stack;
    
        public class Calculate {
    
            String [] str1;
            String result;//计算结果
    
            //构造函数
            public Calculate (String calculate){
                str1=calculate.split("\s");
            }
    
            //将字符串形式的整数或者分数转换为RationalNumber类的对象的方法
            public RationalNumber toRationalNumber(String num){
                if (num.contains("/")==false){
                    int a =Integer.parseInt(num);
                    RationalNumber rationalNumber1 =new RationalNumber(a,1);
                    return rationalNumber1;
                }
                else {
                   /* StringTokenizer st = new StringTokenizer(num,"/");
                    int numerator =Integer.parseInt(st.nextToken("/"));
                    int denominator=Integer.parseInt(st.nextToken("/"));
                    */
                    String[] Array =num.split("/");
                    int numerator = Integer.parseInt(Array[0]);
                    int denominator=Integer.parseInt(Array[1]);
        
                    RationalNumber rationalNumber2 =new RationalNumber(numerator,denominator);
                    return rationalNumber2;
                }
            }
    
            //计算中缀表达式,并将结果保存在result中的方法
            public void ToResult(){
                Stack stack1=new Stack();
                int start =0;
    
                while (start<str1.length){
                    if (str1[start].equalsIgnoreCase("+")==false&&str1[start].equalsIgnoreCase("-")==false&&str1[start].equalsIgnoreCase("×")==false&&str1[start].equalsIgnoreCase("÷")==false){
    
                        stack1.push(str1[start]);
                    }
                    else
                    if (str1[start].equalsIgnoreCase("+")==true){
                        RationalNumber num1=this.toRationalNumber(String.valueOf(stack1.peek()));
                        stack1.pop();
                        RationalNumber num2=this.toRationalNumber(String.valueOf(stack1.peek()));
                        stack1.pop();
                        RationalNumber finish =num2.add(num1);
                        String str3=finish.toString();
                        stack1.push(str3);
                    }
                    else
                    if (str1[start].equalsIgnoreCase("-")==true){
                        RationalNumber num1=this.toRationalNumber(stack1.peek().toString());
                        stack1.pop();
                        RationalNumber num2=this.toRationalNumber(stack1.peek().toString());
                        stack1.pop();
                        RationalNumber finish =num2.subtract(num1);
                        String str3=finish.toString();
                        stack1.push(str3);
                    }
                    else
                    if (str1[start].equalsIgnoreCase("×")==true){
                        RationalNumber num1=this.toRationalNumber(stack1.peek().toString());
                        stack1.pop();
                        RationalNumber num2=this.toRationalNumber(stack1.peek().toString());
                        stack1.pop();
                        RationalNumber finish =num2.multiply(num1);
                        String str3=finish.toString();
                        stack1.push(str3);
                    }
                    else
                    {
                        RationalNumber num1=this.toRationalNumber(String.valueOf(stack1.peek()));
                        stack1.pop();
                        RationalNumber num2=this.toRationalNumber(String.valueOf(stack1.peek()));
                        stack1.pop();
                        RationalNumber finish =num2.divide(num1);
                        String str3=finish.toString();
                        stack1.push(str3);
                    }
    
                    start++;
                }
                String str4=stack1.peek().toString();
                result=str4;
            }
    
            //得到计算结果的方法
            public String getResult() {
                return result;
            }
        
        }
    
    • 测试Calculate

    遇到的困难及解决方法

    • 问题一:在对字符串进行比较时用了“=”,导致测试时没有产生预期的效果
    • 问题一解决方式:只要用equals,进行比较就行。
    • 问题二:在运行计算后缀表达式的驱动类时出现了越界错误。
    • 运行错误截图:
    • 问题二解决方式:解决这问题的是赵晓海同学,我没有起到什么作用。(在这里引用赵晓海博客的解决过程。)
      通过单步调试,String型整数的长度不应定是1,要是整数,字符串中没有字符“/”即可,于是通过查API找到String类中的Contains方法适用.
    • 调试成功截图
    • 代码错误之处
    • 代码改正之处

    项目划分及贡献值分配

    • 我主要负责的是对代码实现的功能进行测试,并对产生的错误提出修改意见

    • 贡献值划分
      赵晓海:70%
      黄宇瑭:30%

    结队伙伴评价

    赵晓海同学在这次项目的编写中付出的努力比我要多很多很多,而且还会帮我解释我不懂的地方,真的感谢他对我的帮助。
    (结队伙伴博客)

    结队照片

  • 相关阅读:
    IOC注解开发与XML整合
    Spring的IOC注解开发入门2
    Spring的IOC注解开发入门1
    降维学习笔记
    决策树集成学习summary
    python shuffle
    为什么会突然难过
    保存为pickle
    gitlab被屏蔽问题
    selenium-历史(一)
  • 原文地址:https://www.cnblogs.com/20172307hyt/p/9008881.html
Copyright © 2020-2023  润新知