实验二 结对编程第二阶段

一、实验目标:

1)体验敏捷开发中的两人合作。

2)进一步提高个人编程技巧与实践。

二 、实验内容:

1)根据以下问题描述,练习结对编程(pair programming)实践;

2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。

3)要求在结对编程工作期间,两人的角色至少切换 4 次;

4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。

三 、实验过程记录

1)总体设计

2)  结对编程过程

刚开始我们只是简单的讨论了一下大概的模块设计。然后我们在网上查找了相关资料后通过QQ屏幕分享的方式进行结对编程。

代码

(1)

public class calculate<optStack> {
private Map<String, Map<String, String>> priorityMap = new HashMap<String, Map<String, String>>();
private Stack<String> optStack = new Stack<String>();
private Stack<Double> numStack = new Stack<Double>();

public double calcualte1(String exp) {
StringTokenizer vn = new StringTokenizer(exp);
while (vn.hasMoreTokens()) {
String token = vn.nextToken();
transversion(token);
}
return numStack.pop();
}
public double calcualte(String exp) {
char[] strExp = exp.toCharArray();
for(char a: strExp){
transversion(""+a+"");
}
return numStack.pop();
}

private void transversion(String token) {
while (false == "=".equals(optStack.peek()) || false == token.equals("=")) {
if (true == judgenum(token)) {
numStack.push(Double.parseDouble(token));
break;

} else {
String priority = priority(optStack.peek(), token);
if ("<".equals(priority)) {
optStack.push(token);
break;
} else if ("=".equals(priority)) {
optStack.pop();
break;
} else {
double res = calculate(optStack.pop(), numStack.pop(), numStack.pop());
numStack.push(res);
}
}
}
}

private double calculate(String opt, double a1, double a2) {
if ("+".equals(opt)) {
return a2 + a1;
} else if ("-".equals(opt)) {
return a2 - a1;
} else if ("*".equals(opt)) {
return a2 * a1;
} else if ("/".equals(opt)) {
return a2 / a1;
} else {
throw new RuntimeException("unsupported operator:" + opt);
}
}

private boolean judgenum(String token) {
int LEN = token.length();
for (int ix = 0 ; ix < LEN ; ++ix) {
char ch = token.charAt(ix);
if (ch == ‘.‘) {
continue;
}
if (false == judgenum(ch)) {
return false;
}
}
return true;
}

private boolean judgenum(char ch) {
if (ch >= ‘0‘ && ch <= ‘9‘) {
return true;
}
return false;
}

public String priority(String op1, String op2) {
return priorityMap.get(op1).get(op2);
}

public calculate() {

optStack.push("=");
Map<String, String> subMap = new HashMap<String, String>();
subMap.put("+", ">");
subMap.put("-", ">");
subMap.put("*", "<");
subMap.put("/", "<");
subMap.put("(", "<");
subMap.put(")", ">");
subMap.put("=", ">");
priorityMap.put("+", subMap);
// -
subMap = new HashMap<String, String>();
subMap.put("+", ">");
subMap.put("-", ">");
subMap.put("*", "<");
subMap.put("/", "<");
subMap.put("(", "<");
subMap.put(")", ">");
subMap.put("=", ">");
priorityMap.put("-", subMap);
// *
subMap = new HashMap<String, String>();
subMap.put("+", ">");
subMap.put("-", ">");
subMap.put("*", ">");
subMap.put("/", ">");
subMap.put("(", "<");
subMap.put(")", ">");
subMap.put("=", ">");
priorityMap.put("*", subMap);
// /
subMap = new HashMap<String, String>();
subMap.put("+", ">");
subMap.put("-", ">");
subMap.put("*", ">");
subMap.put("/", ">");
subMap.put("(", "<");
subMap.put(")", ">");
subMap.put("=", ">");
priorityMap.put("/", subMap);
// (
subMap = new HashMap<String, String>();
subMap.put("+", "<");
subMap.put("-", "<");
subMap.put("*", "<");
subMap.put("/", "<");
subMap.put("(", "<");
subMap.put(")", "=");
//subMap.put("#", ">");
priorityMap.put("(", subMap);
// )
subMap = new HashMap<String, String>();
subMap.put("+", ">");
subMap.put("-", ">");
subMap.put("*", ">");
subMap.put("/", ">");
//subMap.put("(", "<");
subMap.put(")", ">");
subMap.put("=", ">");
priorityMap.put(")", subMap);
// #
subMap = new HashMap<String, String>();
subMap.put("+", "<");
subMap.put("-", "<");
subMap.put("*", "<");
subMap.put("/", "<");
subMap.put("(", "<");
//subMap.put(")", ">");
subMap.put("=", "=");
priorityMap.put("=", subMap);
}
}

(2)

public class timu {
private int n;
private int range;

public int getN() {
return n;
}

public void setN(int n) {
this.n = n;
}

public int getRange() {
return range;
}

public void setRange(int range) {
this.range = range;
}

public void generate(int n, int range) {
char[] symbol = { ‘+‘, ‘-‘, ‘*‘, ‘/‘, ‘(‘ };
int op; // 操作数
try {
File writename = new File("E:\\Java_szys\\szys.txt");
BufferedWriter out = new BufferedWriter(new FileWriter(writename));
for (int i = 0; i < n; i++) {

String eHead = "" + (i + 1) + ". ";
String e ="";
int exlength = (int) (Math.random() * 4 + 2);
int lbracket = 0;
int rbracket = 0;
int[] whe = new int[exlength];
for (int j = 0; j < exlength; j++) {
char s = symbol[(int) (Math.random() * 5)];
if (j == exlength - 1 && s == ‘(‘) {
int count1 = lbracket;
if (lbracket == 0) {
e += "" + (int) (Math.random() * range) + "";
} else {
e += "" + (int) (Math.random() * range) + "";
for (int q = 0; q < count1; q++) {
e += ")";
lbracket--;
}
}
e += "=";
continue;
}
if (lbracket == 0) {
if (s == ‘(‘) {
e = e + "" + s + "" + (int) (Math.random() * range)
+ "" + symbol[(int) (Math.random() * 4)] + "";

whe[rbracket] = (int) (Math.random()
* (exlength - j - 1) + j + 1);

lbracket++;
rbracket++;
} else {
e = e + "" + (int) (Math.random() * range) + "" + s
+ "";
}
} else if (s != ‘(‘) {
int count2 = lbracket;
int count_match = 0;
for (int l = 0; l < count2; l++) {
if (whe[(rbracket-count2) + l ] == j) {
if (count_match == 0) {
e = e + "" + (int) (Math.random() * range)
+ ")";
count_match++;
lbracket--;
} else {
e += ‘)‘;
lbracket--;
}
}
}
if (count_match == 0) {
e = e + "" + (int) (Math.random() * range) + "" + s
+ "";
} else {
e += "" + s + "";
}
} else {
int count3 = lbracket;
int count = 0;
for (int m = 0; m < count3; m++) {

if (whe[rbracket-count3 + m] == j) {
if (count == 0) {
e = e + "" + (int) (Math.random() * range)
+ ")";
count++;
lbracket--;

} else {
e += ‘)‘;
lbracket--;

}

}

}
if (count == 0) {
e = e + "(" + (int) (Math.random() * range) + ""
+ symbol[(int) (Math.random() * 4)] + "";
whe[rbracket] = (int) (Math.random()
* (exlength - j - 1) + j + 1);
lbracket++;
rbracket++;
} else {
e += "" + symbol[(int) (Math.random() * 4)] + "("
+ (int) (Math.random() * range) + ""
+ symbol[(int) (Math.random() * 4)] + "";
whe[rbracket] = (int) (Math.random()
* (exlength - j - 1) + j + 1);
rbracket++;
lbracket++;
}
}

}
char[] strChar = e.toCharArray();
strChar[strChar.length - 1] = ‘=‘;
for(int g=0 ;g<strChar.length;g++){
if(strChar[g]==‘/‘){
if(strChar[g+1]==‘0‘){
i=i-1;
System.out.print("非法表达式");
}

}
}
System.out.print(eHead);
System.out.println(strChar);
calculate ee = new calculate();
double result = ee.calcualte(e);
out.write(eHead+"答案:"+result+"\r\n");
out.flush();

}
out.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}

}

3)运行结果

4)下图是我的github项目地址

四 实验总结

这次实验不仅学到了新的知识,也让我回顾了前面所学的git。在实验中刚开始也遇到了很多问题,像代码托管,以及程序设计等,虽然花了点时间,但两个人以及编程,也不觉得枯燥。而且我发现结对编程比自己一个人要好很多,因为两个人考虑问题相对一个人要更加全面,而且在解决问题方面也会有更多想法。

原文地址:https://www.cnblogs.com/zeroli/p/12630421.html

时间: 2024-07-30 13:26:20

实验二 结对编程第二阶段的相关文章

实验二 结对编程 第二阶段

结对编程(阶段二) 一.实验目标1)体验敏捷开发中的两人合作. 2)进一步提高个人编程技巧与实践. 二 .实验内容1)根据以下问题描述,练习结对编程(pair programming)实践: 2)要求学生两人一组,自由组合.每组使用一台计算机,二人共同编码,完成实验要求. 3)要求在结对编程工作期间,两人的角色至少切换 4 次: 4)编程语言不限,版本不限.建议使用 Python 或 JAVA 进行编程. 博客内容应该包括:1.代码规范 在编写代码时我们一般遵循代码规范的七大原则——空行.空格.

软件工程 实验二 结对编程(第二阶段)

一.实验目标: 1)体验敏捷开发中的两人合作. 2)进一步提高个人编程技巧与实践. 二 .实验内容: 1)根据以下问题描述,练习结对编程(pair programming)实践: 2)两个学生组合,每人使用一台计算机,二人共同编码,完成实验要求. 3)针对课题查阅相关资料,加深对课题的理解: 4)在结对编程工作期间,两人的角色至少切换 4 次: 5)实验过程中合作编程两人互相探讨后采用开发平台和技术,语言工具,准备实验开展工作: 6)做好试验记录和分析工作. 三.实验过程 (一)问题描述 生命游

实验二结对编程 第二阶段

实验目标 1)体验敏捷开发中的两人合作. 2)进一步提高个人编程技巧与实践. 实验内容 1)根据以下问题描述,练习结对编程(pair programming)实践: 2)要求学生两人一组,自由组合.每组使用一台计算机,二人共同编码,完成实验要求. 3)要求在结对编程工作期间,两人的角色至少切换 4 次: 4)编程语言不限,版本不限.建议使用 Python 或 JAVA 进行编程. 1.代码规范 (1)空行与空格:空行起着分隔程序段落的作用,空行得体将使程序的布局更加清晰.每当定义变量和函数后都要

实验二 结对编程 (第二阶段)

一.实验目标 1)体验敏捷开发中的两人合作. 2)进一步提高个人编程技巧与实践. 二 .实验内容 1)根据以下问题描述,练习结对编程(pair programming)实践: 2)要求学生两人一组,自由组合.每组使用一台计算机,二人共同编码,完成实验要求. 3)要求在结对编程工作期间,两人的角色至少切换 4 次: 4)编程语言不限,版本不限.建议使用 Python 或 JAVA 进行编程. 三.代码规范 1.变量名不可以是关键字,尽量做到见名知意.2.宏定义里变量名全大写.3.函数名采用小驼峰式

实验二结对编程 第一阶段

一.实验目标: 1)体验敏捷开发中的两人合作. 2)进一步提高个人编程技巧与实践. 二 .实验内容: 1)根据以下问题描述,练习结对编程(pair programming)实践: 2)要求学生两人一组,自由组合.每组使用一台计算机,二人共同编码,完成实验要求. 3)要求在结对编程工作期间,两人的角色至少切换 4 次: 4)编程语言不限,版本不限.建议使用 Python 或 JAVA 进行编程. 三 .问题描述: 我选择的问题是四则运算,具体要求如下: 开发一个自动生成小学四则运算题目的命令行 “

实验二 结对编程(阶段一)

实验记录—第一阶段 自我学习Github的相关知识的记录: https:////www.cnblogs.com/Incoming22/p/12419553.html 一.查阅资料    ?? 查阅相关资料加深对敏捷开发的和结对编程的理解: 1.敏捷开发 (1)概念: 敏捷开发以用户的需求进化为核心,采用迭代.循序渐进的方法进行软件开发.在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视.可集成和可运行使用的特征.换言之,就是把一个大项目分为多个相互联系,但也

实验二—结对编程第一环节

结对编程(英语:Pair programming)是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作.一个人输入代码,而另一个人审查他输入的每一行代码.输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员).两个程序员经常互换角色. 在结对编程中,观察员同时考虑工作的战略性方向,提出改进的意见,或将来可能出现的问题以便处理.这样使得驾驶者可以集中全部注意力在完成当前任务的“战术”方面.观察员当作安全网和指南.结对编程对开发程序有很多好处.比如增加纪律性,写出更好的代码等. 一.实验目

实验二 结对编程 第一阶段

一.实验目标: 1)体验敏捷开发中的两人合作. 2)进一步提高个人编程技巧与实践. 二 .实验内容 1)根据以下问题描述,练习结对编程(pair programming)实践: 2)要求学生两人一组,自由组合.每组使用一台计算机,二人共同编码,完成实验要求. 3)要求在结对编程工作期间,两人的角色至少切换 4 次: 4)编程语言不限,版本不限.建议使用 Python 或 JAVA 进行编程. 三.实验过程 1)查阅相关资料加深对敏捷开发和结对编程的理解: 敏捷开发:敏捷开发是一种从1990年代开

实验二 结对编程第一阶段

结对编程:第一阶段 ***一.实验目标:*** 1)体验敏捷开发中的两人合作. 2)进一步提高个人编程技巧与实践. ***二 .实验内容:*** 1)根据以下问题描述,练习结对编程(pair programming)实践: 2)要求学生两人一组,自由组合.每组使用一台计算机,二人共同编码,完成实验要求. 3)要求在结对编程工作期间,两人的角色至少切换 4 次: 4)编程语言不限,版本不限.建议使用 Python 或 JAVA 进行编程. ***三.第一阶段:*** ***1) 组队:*** 我的