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. 更改KVM虚拟机root的密码

    今天在使用qemu-kvm安装一个虚拟机,因为已经有一个虚拟机的image文件(qcow2格式的),所以创建虚拟机很简单,直接通过以下命令从image启动就行了. qemu-kvm -cpu host ...

  2. 定心丸!ZipperDown漏洞分析与修复建议

    本文由  网易云发布. 近日,盘古实验室对外披露了ZipperDown漏洞,该漏洞是盘古团队针对不同客户的iOS应用安全审计的过程中发现的,大约有10%的iOS应用会受到此漏洞的影响. 利用此漏洞可以 ...

  3. Truck History(prime)

    Truck History Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 31871   Accepted: 12427 D ...

  4. 在Visual Studio 2012中使用ASP.NET MVC5

    去年11月,.NET团队发布了用于 Visual Studio 2012 的 ASP.NET 和 Web 工具 2013.1 您可以从下面提供的链接下载该更新:  下载用于 Visual Studio ...

  5. 20155239吕宇轩 Linux下IPC机制

    20155239吕宇轩 Linux下IPC机制 - 共享内存 原理:把所有需要使用的共享数据都存放在共享内存 区域中,任何想要访问这些共享数据的进程都必须在自己的进程地址空间中新增加一块内存区域,用来 ...

  6. MacOS下netstat和lsof使用的若干问题

    [-= 博客目录 =-] 1-相关说明 1.1-博客介绍 1.2-netstat和lsof 2-学习过程 2.1-netstat 2.2-lsof 2.3-netstat和lsof区别和关联 3-资料 ...

  7. 2-8 字典dict

    1.如何在一个变量里存储公司每个员工的个人信息? 2.字典的定义与特性 字典是Python语言中唯一的映射类型. 定义:{key1:value1,key2:value2} 1.键与值用冒号“:”分开: ...

  8. P2154 [SDOI2009]虔诚的墓主人

    略有一点点思维的题. 首先,如果一个点上,下,左,右分别有\(a,b,c,d\)棵树,那这个点的十字架方案为\(C_{a}^{k}C_{b}^{k}C_{c}^{k}C_{d}^{k}\). 按x坐标 ...

  9. Kafka系列一 基本安装

    一 配置文件(下载.解压.跳过) # Licensed to the Apache Software Foundation (ASF) under one or more # contributor ...

  10. 对ThreadLocal的源码解读

    早在JDK 1.2的版本中就提供Java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编写出优美的多线程程序. 功能 ...