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

小组成员

  • 20172313 余坤澎
  • 20172332 于欣月
  • 20172326 康皓越

小组编程照片

设计思路

  1. 通过一个Element和Num类来作为基本元素获得表达式
  2. 通过一个Expression来将各个元素组合起来
  3. 通过Cal将表达式计算出来
  4. 通过用户类将结果计算出来,并判断其正负

重要代码

 public void getNum() {
Random num = new Random();
numerator = num.nextInt(9);//分子
denominator = num.nextInt(9)+1;//分母
if (denominator == 1 && numerator != 0)//分母为1,结果为分子。
number = numerator + "";
else if (numerator == 0)//分子为0,结果为分母。
number = denominator + "";
else if (denominator == numerator )
number = 1 + "";
else {
reduce();//约分
if (numerator < denominator)//约分后分子小于分母
number = " ( "+ numerator + "/" + denominator+" ) ";
else if (numerator > denominator)//约分后分子大于分母,交换分子分母
number = " ( "+denominator + "/" + numerator+" ) ";
}
}
//约分的方法
private int gcd(int num1,int num2)
{
while (num1 !=num2) {
if (num1 > num2)
num1 = num1 - num2;
else
num2 = num2 - num1;
} return num1;
}
private void reduce()
{
if (numerator !=0)
{
int common = gcd(Math.abs(numerator),denominator); numerator = numerator/common;
denominator = denominator/common;
}
}

本段为生成分数以及通分,提取公约数

 Random a = new Random();
//是否有括号
int or = a.nextInt(2);
//无括号
if (or == 0) {

通过随机数来判断表达式中是否有括号0为没有,1为有。

 for (int index = 0; index <= times; index++) {
int c = time.nextInt(4);
Elements q = new Elements();
//开始生成表达式
if (c == 0) {
num.getNum();
q.add();
result += num.toString() + q;
count1++;
}
if (c == 1) {
num.getNum();
q.sub();
result += num.toString() + q;
count1++;
}
if (c == 2) {
num.getNum();
q.mul();
result += num.toString() + q;
count2++;
}
if (c == 3) {
num.getNum();
q.div();
result += num.toString() + q;
count2++;
}

通过0,1,2,3来选择加减乘除

public List<String> work(String str){
List<String> list = new ArrayList<String>();
char c;
StringBuilder sb = new StringBuilder();
for(int i=0;i<str.length();i++){
c = str.charAt(i);
if(isDigit(c)){
sb.append(c); }
if(isOp(c)){
if(sb.toString().length()>0){
list.add(sb.toString());
sb.delete(0, sb.toString().length());
}
list.add(c+"");
}
}
if(sb.toString().length()>0){
list.add(sb.toString());
sb.delete(0, sb.toString().length());
}
return list;
}
public void printList(List<String> list){
for(String o:list){
System.out.print(o+" ");
}
}

将生成的表达式数字与符号分别存入数组与栈中

   if(s.equals("+")){
double a1 = (double) stack.pop();
double a2 = (double) stack.pop();
double v = a2+a1;
stack.push(v);
}else if(s.equals("-")){
double a1 = (double) stack.pop();
double a2 = (double) stack.pop();
double v = a2-a1;
stack.push(v);
}else if(s.equals("*")){
double a1 = (double) stack.pop();
double a2 = (double) stack.pop();
double v = a2*a1;
stack.push(v);
}else if(s.equals("/")||s.equals("÷")){
double a1 = (double) stack.pop();
double a2 = (double) stack.pop();
double v = a2/a1;
stack.push(v);

表达式的计算,包含了优先级的选择,以及栈操作使得计算得以使用。

项目链接

小组结对博客

于欣月同学

余坤澎

代码贡献度

余坤澎 于欣月 康皓越
个人贡献度 30% 40% 30%

遇到的困难及解决方法

  1. 运算符的生成问题,一开始时打算使用随机数来表示输出,但是后续的括号无法进行合并,遂放弃。解决方法:将所有符号改为单个方法,例如,加方法只有加号。而值得说的是括号方法有两个,一个左一个右。
  2. 表达式类中的第三等级,因为同样是使用随机数来决定各个加减乘除运算的位置以及个数,但是会出现只有加减或者只有乘除的情况。解决方法:运用一个int型的count变量来监控加减或乘除,如果没有,自动生成相应的缺失运算。
  3. 优先级的问题,是继续在element方法中定义还是怎样?解决方法:直接在cal中计算前,也就是进栈时,规定谁优先。

文件扩展

  1. 判断正确率
  2. 将生成的题目用IO流输入一个文件,生成一个题库

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

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

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

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

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

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

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

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

    20172321『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号 :20172324 姓名 :曾程 伙伴第一周博客地址: 对结对伙伴的评价:一个很优秀的同学,在这次项目中 ...

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

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

  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. hdu Exponentiation高精度实数乘幂(用了带小数的高精度模板)

    #include <cstdio> #include <cstring> #include <iostream> #include <cmath> #i ...

  2. JavaWeb开发使用jsp还是html做前端页面

    一.概述 刚开始学习Javaweb开发的小伙伴都有一个疑惑:用jsp开发前端还是用HTML开发前端呢? 这个疑惑的来源主要是:刚接触完前端但又不深入学习js,接着学习jsp,发现老师们都一直用着jsp ...

  3. 关于Xshell无法连接本地虚拟机的问题

    近期想搭建一个测试用的集群,但是!  刚开始搭第一台虚拟机就出现问题了,Xshell无法连接到虚拟机! 然后我更改了/etc/sysconfig/network-scripts/ifcfg-ens33 ...

  4. python学习第二天 -----2019年4月17日

    第二周-第02章节-Python3.5-模块初识 #!/usr/bin/env python #-*- coding:utf-8 _*- """ @author:chen ...

  5. BZOJ 小Z的袜子 2038 国家集训队

    过程: 想了很久如何求组合数C(n,m),然而 YL 同学提醒了可以直接除以 2*n*(n - 1 ).改了之后果然对了,以为一定是一次性AC 了,然而 WA 了3次,尴尬 —— 神 TM,ZC 苟看 ...

  6. Spring事务控制

    我们在实际业务场景中,经常会遇到数据频繁修改读取的问题.在同一时刻,不同的业务逻辑对同一个表数据进行修改,这种冲突很可能造成数据不可挽回的错乱,所以我们需要用事务来对数据进行管理. 1. 到底什么是事 ...

  7. Hadoop命令大全

    Hadoop命令大全 分类: 云计算2011-03-01 15:04 6852人阅读 评论(0) 收藏 举报 hadoop作业任务集群class脚本 1.列出所有Hadoop Shell支持的命令   ...

  8. 20155204 2016-2017-2 《Java程序设计》第9周学习总结

    20155204 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 SRP单一职责原则,也叫内聚性,判断srp the 类 方法 itself c与java的区 ...

  9. 20155213 2016-2017-2《Java程序设计》第四周学习总结

    20155213 2016-2017-2<Java程序设计>第四周学习总结 教材学习内容总结 继承与多态 继承 继承避免多个类间重复定义共同行为,使用关键字extends.继承表明了子类与 ...

  10. 试用一下markdown

    1 2 3 4 5 6 Blog