20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结
20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结
小组成员
- 20172313 余坤澎
- 20172332 于欣月
- 20172326 康皓越
小组编程照片
设计思路
- 通过一个Element和Num类来作为基本元素获得表达式
- 通过一个Expression来将各个元素组合起来
- 通过Cal将表达式计算出来
- 通过用户类将结果计算出来,并判断其正负
重要代码
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% |
遇到的困难及解决方法
- 运算符的生成问题,一开始时打算使用随机数来表示输出,但是后续的括号无法进行合并,遂放弃。解决方法:将所有符号改为单个方法,例如,加方法只有加号。而值得说的是括号方法有两个,一个左一个右。
- 表达式类中的第三等级,因为同样是使用随机数来决定各个加减乘除运算的位置以及个数,但是会出现只有加减或者只有乘除的情况。解决方法:运用一个int型的count变量来监控加减或乘除,如果没有,自动生成相应的缺失运算。
- 优先级的问题,是继续在element方法中定义还是怎样?解决方法:直接在cal中计算前,也就是进栈时,规定谁优先。
文件扩展
- 判断正确率
- 将生成的题目用IO流输入一个文件,生成一个题库
20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结的更多相关文章
- 20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结
20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 结对伙伴 20172326康皓越 博客地址(http://www.cnblogs.com/326477465-a/p/90 ...
- 20172332『Java程序设计』课程结对编程练习_四则运算第二周阶段总结
20172313『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 小组成员 20172326康皓越 20172313余坤澎 20172332于欣月 小组编程照片 设计思路 设计一个生成符号 ...
- 20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结
20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址 对结对伙伴的评价:黄宇瑭同学的优势在于能够想出一 ...
- 20172321『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结
20172321『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号 :20172324 姓名 :曾程 伙伴第一周博客地址: 对结对伙伴的评价:一个很优秀的同学,在这次项目中 ...
- 20172325『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结
20172325『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号:20172306 姓名:刘辰 结对伙伴博客链接 刘辰同学对编程的积极程度很高,并且在编程能力上很不错,有 ...
- 20172302『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结
一.结对对象 姓名:周亚杰 学号:20172302 担任角色:驾驶员(周亚杰) 伙伴第二周博客地址 二.本周内容 (一)继续编写上周未完成代码 1.本周继续编写代码,使代码支持分数类计算 2.相关过程 ...
- 20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结
20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址: http://www.cnblogs.com/ ...
- 2017-2018-2 1723 『Java程序设计』课程 结对编程练习_四则运算 第二周
一.结对对象 姓名:侯泽洋 学号:20172308 担任角色:驾驶员(侯泽洋) 伙伴第二周博客地址 二.本周内容 (一)继续编写上周未完成代码 1.本周继续编写代码,使代码支持分数类计算 2.相关过程 ...
- 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算——第一周
2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址:点击这里 1. 需求分析: 可生成题目: - 输入要想生成 ...
随机推荐
- 关于DP
关于DP 似乎摸到了门槛呢,学着学着Dijkstra突然有了感觉. 我们遍历的时候会遍历整张图的每个点每条边,然后与已知的对比大小,如果比现在方案好,就放入数组 那么,DP岂不是同样的思想? 在背包问 ...
- C++学习---指针相关
1.指向 “指针对象” 的 ”指针” 一般指针 int *p1,ival =42; p1 = &ival; 或者 int ival =42,*p1=&val; 代表一个指针对象指向一个 ...
- Angular 弹窗 控件
这个控件个人很喜欢,比起primgNG等弹窗组建,这款弹窗可以很轻松的定义自己的样式和布局. 可控参数有:宽度,高度,是否带有关闭图标,基本满足基础弹窗需求. 并且 Title/Content/Foo ...
- MongoDB DBA 实践6-----MongoDB的分片集群部署
一.分片 MongoDB使用分片技术来支持大数据集和高吞吐量操作. 1.分片目的 对于单台数据库服务器,庞大的数据量及高吞吐量的应用程序对它而言无疑是个巨大的挑战.频繁的CRUD操作能够耗尽服务器的C ...
- .NET Core On Liunx环境搭建之MongoDB
伴随着.NET Core的开源,Liunx服务器才是.NET 的未来,公司前几天刚刚上新了一台Liunx服务器,我进行了一下环境的搭建,把经验分享出来. 服务器信息: 服务器用的是阿里云服务器,操作 ...
- 第二篇:shell基础命令(部分)
目录 一.shell命令规则 二.基础命令详解(部分) ls :列出目录内容 mkdir : 创建目录 rmdir :删除目录 touch:新建文件 mv:修改文件(目录)名.移动路径 cp:复制文件 ...
- python财经数据接口包Tushare pro的入门及简单使用方式(大数据,股票数据接口)
最近在做一个项目,需要用到股票的数据,我在网上查了很久,最终发现在股票数据上面还是tushare比较专业,而且对于将来做金融行业的大数据这一块的,tushare绝对是你的一个好帮手,所以下面我就简单介 ...
- 网站漏洞修复案例之Discuz!3.4最新版本
Discuz!论坛目前最新版本为3.4版本,已经好久没有更新了,我们SINE安全在对其网站安全检测的同时发现一处漏洞,该漏洞可导致论坛的后台文件可以任意的删除,导致网站瘫痪,后台无法登陆.关于该网站漏 ...
- 20155213 第十二周课堂作业MySort
20155213 第十二周课堂作业MySort 作业要求 模拟实现Linux下Sort -t : -k 2的功能 参考 Sort的实现 提交码云链接和代码运行截图 初始代码 1 import java ...
- 20155217 2016-2017-2 《Java程序设计》第6周学习总结
20155217 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 InputStream与OutputStream 10.1.1串流设计的概念 Jav ...