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.运行截图
5.代码整体评价:
- 代码较为规范,有必要的注释
- 变量命名遵循java的推荐规范,使用了驼峰命名法
- 单个函数执行单一的功能,代码行数少
- 缺少对异常的捕获和处理
代码优点:
- 尽量使用了java.util包的类,避免了自己写实现代码时出现错误的可能性,如使用了 java.util包的Queue类,ArrayList类,Stack类,使得程序健壮性有所提高.
- 代码风格清晰明了,{}使用得当,表达式里使用了使可读性提高的空格,多个变量分开多行声明,且变量名很规范,清晰易懂.
- 代码的每个子函数功能都有注释,且函数的代码功能实现了单一的功能,代码行数少,可读性和可维护性较高.
代码缺点
- 没有异常处理部分,出现异常参数,会使程序奔溃.
6.总结
此次代码审查,李康康的代码写的很棒,很有借鉴意义,参数命名很规范,没有出现一些如用用拼音做变量名的低级错误,代码的每一部分都很清晰,功能简单易懂,不错乱,读起来很顺畅,让我看到了李康康同学的较强的编程功底,时刻提醒我要有和他一样的编程习惯.