20172321『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

结对伙伴

  • 学号 :20172324
  • 姓名 :曾程
  • 伙伴第一周博客地址:
  • 对结对伙伴的评价:一个很优秀的同学,在这次项目中,即使每天要跳啦啦操,也任劳任怨、一丝不苟、兢兢业业地努力完成了自己的任务。

小组结对编程的照片

项目中自己负责的部分

  • 其实大部分都是我们一起讨论研究,共同完成的,如果硬要分,按每个人出力多的算,我主要负责的是对产生题目的处理和计算以及判断正误。

个人贡献度划分

  • 大家都很努力了,五五开吧

    • 20172321 吴恒佚 50%
    • 20172324 曾程 50%

相关过程的截图

  • 生成题目类驱动类的运行截图

  • 正式产生题目并计算判断运行截图

关键代码解释

  • 我们生成题目的类有一些不足,应该用一个for循环会好一些,我们以后会改正的。
for (int i = 0; i < num; i++) {
int n = random.nextInt(1) + 1; //1个运算符
int[] number = new int[n + 1];
String ex = new String(); for (int j = 0; j <= n; j++) {
number[j] = random.nextInt(10) + 1; //2个数字
}
for (int j = 0; j < n; j++) {
int s = random.nextInt(4);//随机选择某个运算符 ex += String.valueOf(number[j]) + String.valueOf(operator[s]);
if (s == 3) {
number[j + 1] = decide(number[j], number[j + 1]);
}
}
ex += String.valueOf(number[n]);
expression.add(ex);
}
  • 对正误的判断并且统计正确率
int wrong = 0;
for(String st :expression)
{
System.out.println(st);
String str;
str = st;
Zhan lt = new Zhan();
List<String> list = lt.work(str);
List<String> list2 = lt.InfixToPostfix(list);
System.out.println("输入答案");
int daan = scan.nextInt(); System.out.print("后缀表达式为:");
lt.printList(list2);
System.out.println(" "); if(daan != lt.doCal(list2)){
System.out.println("错误 正确答案为:"+lt.doCal(list2));
System.out.println(" ");
wrong = wrong+1;}
else{
System.out.println("正确");
System.out.println(" ");}
}
int sum=100-(wrong*100/num);
System.out.println("正确率:"+sum+"%");
  • 研究学习了一些创建栈的方法,在计算类生成了中缀转后缀并计算的代码
//-----------------------------------------
// 中缀表达式转化为后缀表达式
// 1.遇到数字输出
// 2,遇到高优先级的全部出栈
// 3,最后全部出栈
//-------------------------------------
public List<String> InfixToPostfix(List<String> list){
List<String> Postfixlist = new ArrayList<String>();//存放后缀表达式
Stack<String> stack = new Stack<String>();//暂存操作符
for(int i=0;i<list.size();i++){ String s = list.get(i);
if(s.equals("(")){
stack.push(s);
}else if(s.equals("*")||s.equals("/")){
stack.push(s);
}else if(s.equals("+")||s.equals("-")){
if(!stack.empty()){
while(!(stack.peek().equals("("))){
Postfixlist.add(stack.pop());
if(stack.empty()){
break;
}
}
stack.push(s);
}else{
stack.push(s);
}
}else if(s.equals(")")){
while(!(stack.peek().equals("("))){
Postfixlist.add(stack.pop());
}
stack.pop();
}else{
Postfixlist.add(s);
}
if(i==list.size()-1){
while(!stack.empty()){
Postfixlist.add(stack.pop());
}
}
}
return Postfixlist;
}
//----------------------------------------------
// 用于对后缀表达式的计算
//-----------------------------------------------
public int doCal(List<String> list){
Stack<Integer> stack = new Stack<Integer>();
for(int i=0;i<list.size();i++){
String s = list.get(i);
int t=0;
if(!isOp(s)){
t = Integer.parseInt(s);
stack.push(t);
}else{
if(s.equals("+")){
int a1 = stack.pop();
int a2 = stack.pop();
int v = a2+a1;
stack.push(v);
}else if(s.equals("-")){
int a1 = stack.pop();
int a2 = stack.pop();
int v = a2-a1;
stack.push(v);
}else if(s.equals("*")){
int a1 = stack.pop();
int a2 = stack.pop();
int v = a2*a1;
stack.push(v);
}else if(s.equals("/")){
int a1 = stack.pop();
int a2 = stack.pop();
int v = a2/a1;
stack.push(v);
}
}
}
return stack.pop();
}

遇到的困难及解决办法

  • 这个错误其实上周发现了并尝试解决了,但是后来发现解决的方法其实错了,真正原因是switch里面没有使用break,所以导致错误。

  • 这个错误有点恶心,怎么说呢,说来话长,目前我认为是因为题目生成的类和问题计算的类是我们分别主要负责,貌似是计算类考虑的情况不充分。

项目的码云链接

20172321『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结的更多相关文章

  1. 20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

    20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址 对结对伙伴的评价:黄宇瑭同学的优势在于能够想出一 ...

  2. 20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结

    20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 结对伙伴 20172326康皓越 博客地址(http://www.cnblogs.com/326477465-a/p/90 ...

  3. 20172325『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

    20172325『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号:20172306 姓名:刘辰 结对伙伴博客链接 刘辰同学对编程的积极程度很高,并且在编程能力上很不错,有 ...

  4. 20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结

    20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 小组成员 20172313 余坤澎 20172332 于欣月 20172326 康皓越 小组编程照片 设计思路 通过一个E ...

  5. 20172332『Java程序设计』课程结对编程练习_四则运算第二周阶段总结

    20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 小组成员 20172326康皓越 20172313余坤澎 20172332于欣月 小组编程照片 设计思路 设计一个生成符号 ...

  6. 20172302『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

    一.结对对象 姓名:周亚杰 学号:20172302 担任角色:驾驶员(周亚杰) 伙伴第二周博客地址 二.本周内容 (一)继续编写上周未完成代码 1.本周继续编写代码,使代码支持分数类计算 2.相关过程 ...

  7. 20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结

    20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址: http://www.cnblogs.com/ ...

  8. 2017-2018-2 1723 『Java程序设计』课程 结对编程练习_四则运算 第二周

    一.结对对象 姓名:侯泽洋 学号:20172308 担任角色:驾驶员(侯泽洋) 伙伴第二周博客地址 二.本周内容 (一)继续编写上周未完成代码 1.本周继续编写代码,使代码支持分数类计算 2.相关过程 ...

  9. 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算——第一周

    2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址:点击这里 1. 需求分析: 可生成题目: - 输入要想生成 ...

随机推荐

  1. kubernetes 日志定制查阅 - 排错 -- 好用的命令

    You can use kubectl logs to retrieve logs from a previous instantiation of a container with --previo ...

  2. [图解tensorflow源码] Graph 图模块 —— Graph Loading

  3. 4D产品(DLG、DEM、DOM、DRG)介绍及区别

    4D产品(DLG.DEM.DOM.DRG)是什么? 4D产品是指DRG(数字栅格地图).DLG(数字线化图) .DEM(数字高程模型).DOM(数字正射影像图).4D 复合产品是将4D产品中的任意两种 ...

  4. oracle 事务 数据伪列

    在用户进行数据更新操作(DML)事务一定会起作用. 事务的出现会保证数据的完整性.一致性.在整个事务的处理过程之中主要使用两个操作命令: · 事务的提交(COMMIT):是真正的向数据库之中发出更新指 ...

  5. C++学习第一天(helloword)

    C++编译过程 #include <iostream> //iostream 提供了一个叫命名空间的东西,标准的命名空间是std 包含了有关输入输出语句的函数 // input&^ ...

  6. 重学Verilog(3)——参数化模块

    1.parameter方法 首先有这样一个模块 module half_adder(co,sum,a,b); output co,sum; input a,b; ; ; and #and_delay ...

  7. WPF DatePicker 添加水印效果

    这个控件没有水印属性,依然使用依赖属性解决 public class DatePickerHelper { public static object GetWatermark(DependencyOb ...

  8. tomcat : 虚拟路径映射

    tomcat设置虚拟访问地址和真实路径的映射,方法有几种,这里介绍常用的两种方式: 一.修改server.xml文件: 步骤如下:  1.在tomcat根目录下打开conf文件夹,该文件夹下有个ser ...

  9. 【HNOI2007】紧急疏散

    题面 题解 \(\text{HNOI2007}\)真的恐怖 这是集合了所罗门的咒语,胜负一子等神仙题和码农题的一年 所以这道题非常码 二分答案,将门拆点,于是就变成了一个二分图匹配的题目 反正很恶心 ...

  10. 第二章:走进shell

    2.2 通过Linux控制台终端访问CLI(command line interface) 打开CLI:control+alt+t   用于设置前景色和背景色的setterm选项 选项 参数 描述 - ...