个人工作流程计应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; // 是否有括号
}
});
}
显示效果:




浙公网安备 33010602011771号