个人工作流程计应192六组智凯义

PSP计划表格

PSP阶段

预计花费时间(小时) 实际花费时间
计划 2 2
明确需求和其他相关因素,估计每个阶段的时间成本 1 2
开发 20 30
需求分析 2 2
代码规范 1 1
具体设计 2 2
具体编码 4 4
代码复审 1 2

测试(自测、修改代码、提交修改)

2 4

 

计划:

  对项目进行分析,提出问题

需求分析:

  计算结果

       显示对错

       统计正确率

具体设计  

       产生100以内的正整数

  产生+-运算符

  选中,运算

       输出结果

代码实现:

一:RandomFormula类的无参构造方法,用来设置默认值。
numberTotal运算数数量设置为2,
formulaToal运算式数量设置为10,
numberRange数字范围设置为100,
maxResult运算结果的最大范围不超过100的绝对值,
includeMulAndDiv包含乘除设置为false,
includeNegNum设置为false。
public RandomFormula() {
this.numberTotal = 2;
this.formulaTotal = 10;
this.numberRange = 100;
this.maxResult = 100;
this.includeMulAndDiv = false;
this.includeNegNum = false;
}
二:RandomFormula类的有参构造方法,用来根据需求初始化。
public RandomFormula(int numberTotal, int formulaTotal, int numberRange, int maxResult, boolean includeMulAndDiv,
boolean includeNegNum) {
this.numberTotal = numberTotal;
this.formulaTotal = formulaTotal;
this.numberRange = numberRange;
this.maxResult = maxResult;
this.includeMulAndDiv = includeMulAndDiv;
this.includeNegNum = includeNegNum;
}
三:产生随机运算数和随机运算符:getRandomNumber方法用来产生随机数,getRandomOperator方法用来产生随机运算符。
public int getRandomNumber() {
Random rand = new Random();
if (this.includeNegNum) {
return (rand.nextInt(this.numberRange) + 1) * (rand.nextDouble() > 0.5 ? 1 : -1);
} else {
return rand.nextInt(this.numberRange) + 1;
}
}
/**
* 得到一个随机的运算符
*
* @return返回运算符
*/
public String getRandomOperator() {
Random rand = new Random();
String[] operations = { "+", "-", "*", "/" };
return operations[rand.nextInt((this.includeMulAndDiv == true) ? 4 : 2)];
},
四:生成四则运算generateFormula方法生成一道四则运算,如果isNegNum方法判断包含负数,则负数加括号
generateFormulas生成指定数量的四则运算,用HashSet来存储,可以自动去重算式
/**
* 生成算式
*
* @return 返回算式
*/
public String generateFormula() {
String formula = "";
for (int i = 0; i < this.numberTotal; i++) {
if (i >= this.numberTotal - 1) {
formula += isNegNum(this.getRandomNumber());
continue;
}
formula += isNegNum(this.getRandomNumber()) + " " + this.getRandomOperator() + " ";
}
return formula;
}

五:计算算式的值:
public int compute(Stack<String> opOperators, Stack<Integer> opNumbers) {
int num2 = opNumbers.pop();
int num1 = opNumbers.pop();
String _op = opOperators.pop();
int result = 0;
switch (_op) {
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
case "/":
result = num1 / num2;
break;
}
return result;
}
六:生成答案:
generateAnswers用来生成相应算式数量的值,用一维数组来存储。
public int[] generateAnswers(HashSet<String> set) {
int[] arr = new int[set.size()];
int i = 0;
for (String str : set) {
arr[i++] = generateAnswer(str);
}
return arr;
}
JUI界面代码:

public GUI() {
mybutton=new ActionFrame().getButton();
JPanel p1 = new JPanel(new GridLayout(0, 2));
JPanel p3 = new JPanel(new GridLayout(0, 2));
p1.add(new JLabel("请输入题目数 "));
p1.add(n);
p1.add(new JLabel("运算符个数上限"));
p1.add(o);
p1.add(new JLabel("数值范围下界 "));
p1.add(m1);
p1.add(new JLabel("数值范围上界 "));
p1.add(m2);
p3.add(A);
p3.add(B);
//p3.add(mybutton);
JPanel p2 = new JPanel(new FlowLayout(FlowLayout.RIGHT));
p2.add(mybutton);

p2.add(jbtBeginCompute);
add(p1, BorderLayout.CENTER);
add(p2, BorderLayout.SOUTH);
add(p3, BorderLayout.EAST);
ButtonListener listener = new ButtonListener();
jbtBeginCompute.addActionListener(listener);
A.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
c = 1; // 是否有乘除
}
});
B.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
b = 1; // 是否有括号
}
});
}

显示效果:

 

 

 

 

 

 

 

posted @ 2021-04-11 14:15  智凯义  阅读(57)  评论(0)    收藏  举报