结对作业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<Integer> preorderTraversal(TreeNode root) {
        LinkedList<Integer> res = new LinkedList<>();
        if(root == null)
            return res;
        Stack<TreeNode> 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.运行截图###

5.代码整体评价:###

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

代码优点:

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

代码缺点###

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

6.总结###

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

posted @ 2019-05-06 22:24  Daft-Punk  阅读(163)  评论(0编辑  收藏  举报