软件工程个人作业02
2016-03-19 13:47
381 查看
组内成员:张雪晴
设计思想(基于作业01):
题目避免重复:将随机生成的表达式以string类型存储在数组中,遍历数组以避免新产生的表达式与前面重复。
数值范围、可定制数量与打印方式:用户输入运算数数值范围、题目个数与打印方式即几行几列。
函数部分:定义三个函数,分别是MultiAndDiv()有无乘除法、Bracket()有无括号(最多支持10个数的运算)、Minus()加减法有无负数(包括减法结果有无负数)。用户可在程序开始定义这些功能的有无。
具体实现:
1. 使用无限循环实现不同功能的输出以满足用户的需求。
2. 输出语句,让用户输入数值范围Range,题目个数SumNum,打印方式:m行n列;输入有无乘除法,有Mu=1,无Mu=0;输入有无括号,有B=1,无B=0;输入加减法有无负数,有Mi=1,无Mi=0;输入除法有无余数,有D=1,无D=0。
3. MultiAndDiv():在规定的数值范围内,随机产生temp(2-10)个随机数与运算结合成表达式,并考虑除法有无余数,即判断除号两边的数取余是否为0,如果没有余数,则从新生成取余不为0的两个数。若有余数,随机输出即可。
4. Bracket()(最多支持10个数的运算):未能很好的实现。
5. Minus():如果没有负数,则去除减数大于被减数的情况;如果有负数,则产生负随机数(每个负的随机数都要加括号),进行输出。
6. 进行SumNum次循环,并根据Mu、Mi、D的值调用函数MultiAndDiv()、Bracket()、Minus(),遍历数组以避免新产生的表达式与前面重复,如果重复则继续生成表达式,直到不重复为止。
7.考虑含负数情况下也有无负数的表达式。
源代码:
运行结果截图:
无乘除 有负数
![](http://images2015.cnblogs.com/blog/753619/201603/753619-20160319132137099-20774944.png)
有乘除 无负数 有余数
![](http://images2015.cnblogs.com/blog/753619/201603/753619-20160319132304912-604230287.png)
有乘除 有负数 有余数
![](http://images2015.cnblogs.com/blog/753619/201603/753619-20160319132349709-317582899.png)
程序总结
存在的问题:括号输出功能实现的不够全面。感觉有无余数功能应该是对的,但输出不对 ,不知道为什么。
先写出程序大框,再逐步加入细节,考虑问题需要全面,然后以后要尽量缩短编程时间。Java语言基础不够扎实,还需要多加训练。
结组编程时从对方身上学到很多。
周活动总结表
姓名:尤凯丽 日期 2016/3/18
时间记录日志
学生:尤凯丽 日期:2016/3/18
教师:王建民 课程:软件工程
缺陷记录日志
学生:尤凯丽 日期:2016/3/18
教员:王建民 程序号:四则运算第二季
设计思想(基于作业01):
题目避免重复:将随机生成的表达式以string类型存储在数组中,遍历数组以避免新产生的表达式与前面重复。
数值范围、可定制数量与打印方式:用户输入运算数数值范围、题目个数与打印方式即几行几列。
函数部分:定义三个函数,分别是MultiAndDiv()有无乘除法、Bracket()有无括号(最多支持10个数的运算)、Minus()加减法有无负数(包括减法结果有无负数)。用户可在程序开始定义这些功能的有无。
具体实现:
1. 使用无限循环实现不同功能的输出以满足用户的需求。
2. 输出语句,让用户输入数值范围Range,题目个数SumNum,打印方式:m行n列;输入有无乘除法,有Mu=1,无Mu=0;输入有无括号,有B=1,无B=0;输入加减法有无负数,有Mi=1,无Mi=0;输入除法有无余数,有D=1,无D=0。
3. MultiAndDiv():在规定的数值范围内,随机产生temp(2-10)个随机数与运算结合成表达式,并考虑除法有无余数,即判断除号两边的数取余是否为0,如果没有余数,则从新生成取余不为0的两个数。若有余数,随机输出即可。
4. Bracket()(最多支持10个数的运算):未能很好的实现。
5. Minus():如果没有负数,则去除减数大于被减数的情况;如果有负数,则产生负随机数(每个负的随机数都要加括号),进行输出。
6. 进行SumNum次循环,并根据Mu、Mi、D的值调用函数MultiAndDiv()、Bracket()、Minus(),遍历数组以避免新产生的表达式与前面重复,如果重复则继续生成表达式,直到不重复为止。
7.考虑含负数情况下也有无负数的表达式。
源代码:
package pkg; import java.util.Random; import java.util.Scanner; class Calculate { public String AddAndSub(int range,int Mi){//定义有加减法时的各种情况 Random random =new Random(); String output=""; int temp1=2+random.nextInt(7); for(int i=0;i<temp1;i++) //控制运算数个数 { int m=random.nextInt(2); //控制加减号的随机输出 int n=random.nextInt(2); //控制有无分数 int l=random.nextInt(10); //控制有负数的情况下包含无负数的输出 int first=random.nextInt(range)+1; int second=random.nextInt(range)+2; char f=' '; //随机输出加减法 if(m==0) f='+'; if(m==1) f='-'; if(n==0) //没有分数 { if(Mi==1) //有负数 { if(l>=4) //有负数 { first=-1*(random.nextInt(range)+1); output+="("+first+")"; } if(l<4) //不含负数运算 output+=first; if(i!=temp1-1){output+=f;}//配合输出运算符 } if(Mi==0) //无负数 { output+=first; if(i!=temp1-1){output+=f;} } } if(n==1) //有分数 { if(first>=second){ //化简 for(int a=second;a>0;a--) { if(first%a==0&&second%a==0) { first=first/a; second=second/a; } } } else { for(int a=first;a>0;a--) { if(first%a==0&&second%a==0) { first=first/a; second=second/a; } } } if(Mi==1) //有负数 { if(l>=4){ first=-1*(random.nextInt(range)+1); output+="( ("+first+")"+"/"+second+" )";} if(l<4) //有负数的情况下也会产生无负数的情况 output+=first+"/"+second; } if(Mi==0) output+=first+"/"+second; if(i!=temp1-1) output+=f; } } output+="="; return output; } public String MultiAndDiv(int range,int D,int Mi){ //定义有乘除法时的各种情况 Random random =new Random(); int temp1=2+random.nextInt(8); int l=random.nextInt(10); //控制有负数的情况下包含无负数的输出 String output=""; for(int i=0;i<temp1;i++) //控制运算数个数 { int first=random.nextInt(range)+1; int second=random.nextInt(range)+1; char f=' '; int temp2=random.nextInt(2); if(temp2==0) f='+'; if(temp2==1) f='-'; if(D==0) //没有余数 { for(int c=0;;) { if(first%second!=0||second%first!=0) //判断是否能整除,否重新生成,并直到能整除为止 { first=random.nextInt(range)+1; second=random.nextInt(range)+1; } else break; } if(Mi==1) //有负数 { if(l>=4) { first=-1*(random.nextInt(range)+1); output+="("+first+")"; } if(l<4) //有负数的情况下也会产生无负数的情况 output+=first; } if(Mi==0) output+=first; if(i!=temp1-1) { int temp3=random.nextInt(2); if(temp3==0) output+="*"+second+f; if(temp3==1) output+="/"+second+f; } } if(D==1) //有余数 { output+=first; if(i!=temp1-1) { int temp4=random.nextInt(4); if(temp4==0) output+="*"; if(temp4==1) output+="/"; if(temp4==2) output+="+"; if(temp4==3) output+="-"; } } } output+="="; return output; } public String Bracket(String E){ //多项式加括号 Random random =new Random(); int t=E.indexOf("+")+1; E=E.substring(0,t)+'('+E.substring(t+1,E.length()); E=E.substring(0,t+4)+')'+E.substring(t+5,E.length()); return E; } } public class CalculateTwo extends Calculate{ //继承Calculate public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); Random random =new Random(); int D=0; Calculate C;C=new Calculate(); for(int j=0;;) //输出需要用户定义的要求 { System.out.println("Please input the number's range of this calculation:"); int Range=in.nextInt(); System.out.println("Please input the number of this calculation:"); int SumNum=in.nextInt(); System.out.println("Please input the lines of this calculation:"); int m=in.nextInt(); System.out.println("Is there multiplication and division in this calculation?Yes,prress 1 No,press 0:"); int Mu=in.nextInt(); if(Mu==1){ System.out.println("Is there reminder in division?Yes,prress 1 No,press 0:"); D=in.nextInt();} System.out.println("Is there minus in this calculation?Yes,prress 1 No,press 0:"); int Mi=in.nextInt(); System.out.println("Is there parenthese in this calculation?Yes,prress 1 No,press 0:"); int B=in.nextInt(); int l=random.nextInt(10); //控制有负数的情况下有无负数的输出 String []Expre=new String[SumNum+1]; for(int i=0;i<SumNum;i++) { if(Mu==0) //无乘除法 { boolean s=false; //查询是否有重复 if(i==0) Expre[i]=C.AddAndSub(Range, Mi); else { Expre[i]=C.AddAndSub(Range, Mi); for(int d=0;;) //如果有重复则继续生成,直到无重复为止 { int c; for(c=0;c<i;c++) { s=Expre[i].equals(Expre[c]); if(s==true) break; } if(c<=i-1) //如果循环跳出时的c值小于i-1说明有重复 { Expre[i]=C.AddAndSub(Range, Mi); } else break; } } } if(Mu==1) //有乘除 { boolean s=false; //查询是否有重复 if(i==0) { if(l>=4) Expre[i]=C.MultiAndDiv(Range,D,Mi); if(l<4) Expre[i]=C.AddAndSub(Range, Mi); } else { if(l>=4) Expre[i]=C.MultiAndDiv(Range,D,Mi); if(l<4) Expre[i]=C.AddAndSub(Range, Mi); for(int d=0;;) //如果有重复则继续生成,直到无重复为止 { int c; for(c=0;c<i;c++) { s=Expre[i].equals(Expre[c]); if(s==true) break; } if(c<=i-1) //如果循环跳出时的c值小于i-1说明有重复 { if(l>=4) Expre[i]=C.MultiAndDiv(Range,D,Mi); if(l<4) Expre[i]=C.AddAndSub(Range, Mi); } else break; } } } } if(B==1) //有括号 { for(int i=0;i<SumNum;i++) { if(Expre[i].length()>8) C.Bracket(Expre[i]); } } for(int i=0;i<SumNum;i++) //输出字符串数组 { System.out.print(Expre[i]+" "); if((i+1)%m==0) System.out.println(); } System.out.println(); System.out.print("Try again press:1 Quit press:0"); int g=in.nextInt(); if(g==1) continue; if(g==0) break; } } }
运行结果截图:
无乘除 有负数
![](http://images2015.cnblogs.com/blog/753619/201603/753619-20160319132137099-20774944.png)
有乘除 无负数 有余数
![](http://images2015.cnblogs.com/blog/753619/201603/753619-20160319132304912-604230287.png)
有乘除 有负数 有余数
![](http://images2015.cnblogs.com/blog/753619/201603/753619-20160319132349709-317582899.png)
程序总结
存在的问题:括号输出功能实现的不够全面。感觉有无余数功能应该是对的,但输出不对 ,不知道为什么。
先写出程序大框,再逐步加入细节,考虑问题需要全面,然后以后要尽量缩短编程时间。Java语言基础不够扎实,还需要多加训练。
结组编程时从对方身上学到很多。
周活动总结表
姓名:尤凯丽 日期 2016/3/18
听 课 | 编写代码 | 阅读课本 | 准备考试 | 日总计 | |
周日 | |||||
周一 | 100分钟 | 20 | 构建之法1-4章 | 讨论程序 | 100分钟 |
周二 | 60 | ||||
周三 | 70 | ||||
周四 | 50 | ||||
周五 | 70 | ||||
周六 | |||||
周总计 | 100分钟 | 270 | 100分钟 |
学生:尤凯丽 日期:2016/3/18
教师:王建民 课程:软件工程
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 | C | U |
3.14 | 8:00 | 9:50 | 8:50-9:00 | 100 | 听课 | 4个 小时(1-4章) | ✔ | |
16:00 | 17:30 | 90 | 阅读笔记 | ✔ | ||||
20:00 | 21:00 | 20:30-20:40 | 50 | 讨论程序 | ✔ | |||
3.15 | 15:00 | 16:50 | 110 | 写设计思想 | 2个小时 | ✔ | ||
21:40 | 22:30 | 50 | 编程序 | ✔ | ||||
3.16 | 21:40 | 22:30 | 50 | 编程序 | 50 | ✔ | ||
3.17 | 17:20 | 18:20 | 17:30-17-40 | 50 | 编程序 | 2个小时 | ✔ | |
21:40 | 23:00 | 22:00-22:10 | 70 | ✔ | ||||
3.18 | 17:00- | 21:00 | 18:00-18:20 | 220 | 编程序 博客 | 3小时40 | ✔ | |
3.19 | 9:50-9:55 | ✔ |
学生:尤凯丽 日期:2016/3/18
教员:王建民 程序号:四则运算第二季
日期 | 编 号 | 类 型 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 |
3.16 | 1 | 20 | 编程 | 编程 | 1min | |
描述:创建对象方法错误 | ||||||
3.17 | 2 | 10 | 编程 | 编译 | 2min | |
描述:未考虑有负数情况下也包含无负数的运算式 | ||||||
3 | 80 | 编程 | 编译 | 1min | ||
描述:当用户输入无乘除法时还会提示除法有无余数 | ||||||
3.18 | 4 | 10 | 编程 | 编译 | 2min | |
描述:循环体错误,删掉output+=“+”等 | ||||||
5 | 20 | 编程 | 编译 | 3min | ||
描述:循环变量错误,把d改为i |
相关文章推荐
- 微信浏览器禁止app下载链接的两种处理方法
- Android之Window和Activity和View
- linux 内核线程demo
- android开发之路11(用SharedPreferences存储数据)
- centos7 安装php-7.0.4
- knockoutjs十四 option绑定
- 用VNC 客户端如何查看openstack 创建的虚拟机
- 12 API-常用类(Scanner类,String类)
- ftrace macro
- WifiManager详解-wifi连接状态的监听
- usaco 2.1.4 holstein
- Ajax 请求实例
- InterrogationActivity
- 关于在struts2中用ognl表达式截取时间长度
- Android进阶之大话设计模式
- ftrace framework
- java语言实现冒泡排序、简单选择排序、反转排序
- Android常用设计模式
- java集合类学习
- 四则运算3+PSP