结对作业2

1.代码地址: github

2.任务分工

领航员:李康康
驾驶员:罗园龙

3.代码原理分析:

这段java代码实现了四则运算式子的生成,能够在程序中指定生成选项.
1.算式个数选项
指定生成式子的个数
参考代码如下:

JLabel num = new JLabel("\u7B97\u5F0F\u4E2A\u6570");
        num.setBounds(10, 10, 60, 15);
        contentPane.add(num);

2.最大数选项
指定生成式的最大数
代码如下:

JLabel max = new JLabel("\u6700\u5927\u6570");
        max.setBounds(10, 45, 65, 15);
        contentPane.add(max);

3.运算符选项
指定生成式所用到的操作符
代码如下:

 JLabel operate = new JLabel("\u8FD0\u7B97\u7B26");
        operate.setBounds(10, 76, 40, 23);
        contentPane.add(operate);
        
        JCheckBox Add = new JCheckBox("+");
        Add.setBounds(56, 76, 50, 23);
        contentPane.add(Add);
        
        JCheckBox Sub = new JCheckBox("-");
        Sub.setBounds(110, 76, 50, 23);
        contentPane.add(Sub);
        
        JCheckBox Mult = new JCheckBox("*");
        Mult.setBounds(56, 114, 50, 23);
        contentPane.add(Mult);
        
        JCheckBox Div = new JCheckBox("/");
        Div.setBounds(110, 114, 50, 23);
        contentPane.add(Div);

4.先序遍历
给定二叉树,返回其节点值的前序遍历
代码如下:

public List preorderTraversal(TreeNode root) {
        LinkedList res = new LinkedList<>();
        if(root == null)
            return res;
        Stack stack = new Stack<>();
        stack.push(root);
        while(!stack.isEmpty()){
            TreeNode node = stack.pop();
            res.add(node.val);
            if(node.right != null){
                stack.push(node.right);
            }
            if(node.left != null){
                stack.push(node.left);
            }
        }
        return res;
    }

4.括号选项
设定运算式是否包含括号

    JLabel bracketer = new JLabel("\u62EC \u53F7");
        bracketer.setBounds(10, 149, 35, 23);
        contentPane.add(bracketer);
        
        JRadioButton khY = new JRadioButton("Y");
        khY.setBounds(56, 149, 35, 23);
        contentPane.add(khY);
        
        JRadioButton khN = new JRadioButton("N");
        khN.setBounds(110, 149, 40, 23);
        contentPane.add(khN);
        
        ButtonGroup groupkuohao = new ButtonGroup();
        groupkuohao.add(khY);
        groupkuohao.add(khN);

5.小数点选项
设定生成式是否包含小数点
代码如下:

JLabel point = new JLabel("\u5C0F \u6570");
        point.setBounds(10, 182, 35, 23);
        contentPane.add(point);
        
        JRadioButton xsY = new JRadioButton("Y");
        xsY.setBounds(56, 182, 35, 23);
        contentPane.add(xsY);
        
        JRadioButton xsN = new JRadioButton("N");
        xsN.setBounds(110, 182, 40, 23);
        contentPane.add(xsN);
        
        ButtonGroup groupxiaoshu = new ButtonGroup();
        groupxiaoshu.add(xsY);
        groupxiaoshu.add(xsN);

6.输出方式选项
设定输出方式,有文件和控制台两种选择
代码如下:

 JLabel outMethod = new JLabel("\u8F93\u51FA\r\n\u65B9\u5F0F");
        outMethod.setBounds(10, 220, 54, 15);
        contentPane.add(outMethod);
        
        JRadioButton outMethodF = new JRadioButton("\u6587\u4EF6");
        outMethodF.setBounds(70, 216, 60, 23);
        contentPane.add(outMethodF);
        
        JRadioButton outMethodP = new JRadioButton("\u6253\u5370\u673A");
        outMethodP.setBounds(130, 216, 70, 23);
        contentPane.add(outMethodP);
        
        ButtonGroup prin = new ButtonGroup();
        prin.add(outMethodP);
        prin.add(outMethodF);

7.输出按钮及按钮的Lisetener实现

JButton button = new JButton("\u751F\u6210\u7B97\u5F0F");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                String n1 = numtxt.getText();
                int num = Integer.parseInt(n1);
                String n2 = maxtxt.getText();
                int max = Integer.parseInt(n2);
                int[] a = {0,0,0,0};
                int kh=0,outp=0,xs=0;
                if(Add.isSelected())
                    a[0] = 1;
                if(Sub.isSelected())
                    a[1] = 1;
                if(Mult.isSelected())
                    a[2] = 1;
                if(Div.isSelected())
                    a[3] = 1;
                if(khY.isSelected()) {
                    kh = 1;
                }else {
                    kh = 0;
                }
                if(xsY.isSelected()) {
                    xs = 1;
                }else {
                    xs = 0;
                }
                if(outMethodF.isSelected()) {
                    outp = 1;
                }else {
                    outp = 0;
                }
                view.out(num,max,a,kh,xs,outp);
            }
        });

4.运行截图

结对作业2_第1张图片

5.代码整体评价:

  • 代码较为规范,有必要的注释
  • 变量命名遵循java的推荐规范,使用了驼峰命名法
  • 单个函数执行单一的功能,代码行数少
  • 缺少对异常的捕获和处理

代码优点:

  • 尽量使用了java.util包的类,避免了自己写实现代码时出现错误的可能性,如使用了 java.util包的Queue类,ArrayList类,Stack类,使得程序健壮性有所提高.
  • 代码风格清晰明了,{}使用得当,表达式里使用了使可读性提高的空格,多个变量分开多行声明,且变量名很规范,清晰易懂.
  • 代码的每个子函数功能都有注释,且函数的代码功能实现了单一的功能,代码行数少,可读性和可维护性较高.

代码缺点

  • 没有异常处理部分,出现异常参数,会使程序奔溃.

6.总结

此次代码审查,李康康的代码写的很棒,很有借鉴意义,参数命名很规范,没有出现一些如用用拼音做变量名的低级错误,代码的每一部分都很清晰,功能简单易懂,不错乱,读起来很顺畅,让我看到了李康康同学的较强的编程功底,时刻提醒我要有和他一样的编程习惯.

你可能感兴趣的:(结对作业2)