软件工程个人作业03
2016-03-26 13:34
369 查看
四则运算3
设计思想
1、输入:输入选择;
2、选择内容:选择出2位数的题还是多位数的题还是退出程序
选择1是否有乘除法(运算符0-1或0-3);
选择5加减有无负数;
选择6除法有无余数;
选择7是选择数量或打印方式。
3是数值范围的前域
4是数值范围的后域
3、加工:2位数的题设置循环,令其长度为一个足够大的数,满足程序一次运行可多次使用
是否有乘除法:在前面做出选择后,在下面只需设置运算符随机出数的范围在0-1之间还是0-3之间
数值范围:即四则运算随机出数的范围在前域~后域
加减有无负数:对随机生成的数字进行运算,如果进行加/减运算之后,有负数,则根据选择进行保留或舍弃
控制题目不能重复:将之前的题目存放在数组中,然后依次进行比较
打印方式:根据用户输入要求一行输出几列后,利用取余的方法判断是否要换行输出
计算则按照顺序计算即可
多位数的题:
设置循环,令其长度为一个足够大的数,满足程序一次运行可多次使用
是否有乘除法:在前面做出选择后,在下面只需设置运算符随机出数的范围在0-1之间还是0-3之间
数值范围:即四则运算随机出数的范围在前域~后域
加减有无负数:对随机生成的数字进行运算,如果进行加/减运算之后,有负数,则根据选择进行保留或舍弃
有无括号:用随机数来进行选择在原来式子之前还是之后进行添加
控制题目不能重复:将之前的题目存放在数组中,然后依次进行比较
打印方式:根据用户输入要求一行输出几列后,利用取余的方法判断是否要换行输出
带括号的计算是直接从最里层括号开始往外依次计算
不带括号的计算则分为没有乘除法和有乘除法
没有乘除法的是将运算式存为二维数组,将数值和运算符依次分别存放于两个数组中,然后按从左到右的顺序进行计算
有乘除法的则需进一步统计,在哪有除法或者乘法,然后先进行这两个运算。
4、输出:2位数运算,显示运算式以及用户输入的结果,还有系统判断的结果
最后,则是系统统计用户的做题情况
多位数运算则是显示运算式以及系统产生的结果
源程序代码
运行结果截图
编程总结分析
每次拿到题目,都不能冷静分析思考,这次结对编程,何同学是主力,在讨论的过程中,我发现了自身的很多问题,如思考的不全面
项目计划总结
姓名:张一博 日期:2016/3/26
时间记录日志
学生:张一博 日期:2016/3/26
教师:王建民 课程:软件工程概论
缺陷记录日志
姓名:张一博 日期:2016/3/26
教师:王建民 程序:四则运算3
附工作照片
设计思想
1、输入:输入选择;
2、选择内容:选择出2位数的题还是多位数的题还是退出程序
选择1是否有乘除法(运算符0-1或0-3);
选择5加减有无负数;
选择6除法有无余数;
选择7是选择数量或打印方式。
3是数值范围的前域
4是数值范围的后域
3、加工:2位数的题设置循环,令其长度为一个足够大的数,满足程序一次运行可多次使用
是否有乘除法:在前面做出选择后,在下面只需设置运算符随机出数的范围在0-1之间还是0-3之间
数值范围:即四则运算随机出数的范围在前域~后域
加减有无负数:对随机生成的数字进行运算,如果进行加/减运算之后,有负数,则根据选择进行保留或舍弃
控制题目不能重复:将之前的题目存放在数组中,然后依次进行比较
打印方式:根据用户输入要求一行输出几列后,利用取余的方法判断是否要换行输出
计算则按照顺序计算即可
多位数的题:
设置循环,令其长度为一个足够大的数,满足程序一次运行可多次使用
是否有乘除法:在前面做出选择后,在下面只需设置运算符随机出数的范围在0-1之间还是0-3之间
数值范围:即四则运算随机出数的范围在前域~后域
加减有无负数:对随机生成的数字进行运算,如果进行加/减运算之后,有负数,则根据选择进行保留或舍弃
有无括号:用随机数来进行选择在原来式子之前还是之后进行添加
控制题目不能重复:将之前的题目存放在数组中,然后依次进行比较
打印方式:根据用户输入要求一行输出几列后,利用取余的方法判断是否要换行输出
带括号的计算是直接从最里层括号开始往外依次计算
不带括号的计算则分为没有乘除法和有乘除法
没有乘除法的是将运算式存为二维数组,将数值和运算符依次分别存放于两个数组中,然后按从左到右的顺序进行计算
有乘除法的则需进一步统计,在哪有除法或者乘法,然后先进行这两个运算。
4、输出:2位数运算,显示运算式以及用户输入的结果,还有系统判断的结果
最后,则是系统统计用户的做题情况
多位数运算则是显示运算式以及系统产生的结果
源程序代码
import java.util.Random; import java.util.Scanner; import javax.swing.JOptionPane; public class Arithmetic { public static void main(String[] args) { // TODO 自动生成的方法存根 int c;//选择 int c1,c4,c5,c6,c7,c8; int a,b,d1;//二位数运算 int c2,c3; int e=0;//运算符 String s=""; double d=0.0;//2位数的结果,用户 double f=0.0,g=0.0;//2位数结果,系统,多位数结果,系统 int flag=0;//判断是否输出 int m=0;//题数 Random rand = new Random(); for(int i=0;i<100000000;i++) { System.out.println("请输入选择:1、2位数运算 2、多位数运算 3、退出"); Scanner input=new Scanner(System.in) ; c=input.nextInt(); if(c==1) { System.out.println("请输入选择:1 、有乘除法 2、无乘除法"); Scanner input1=new Scanner(System.in) ; c1=input1.nextInt(); System.out.println("请输入数值范围的前域 "); Scanner input2=new Scanner(System.in) ; c2=input2.nextInt(); System.out.println("请输入数值范围的后域"); Scanner input3=new Scanner(System.in) ; c3=input3.nextInt(); System.out.println("请输入选择:1、加减有负数 2、加减无负数"); Scanner input4=new Scanner(System.in) ; c4=input4.nextInt(); System.out.println("请输入选择:1、除法有余数 2、除法无余数"); Scanner input5=new Scanner(System.in) ; c5=input5.nextInt(); System.out.println("请输入出题数量"); Scanner input6=new Scanner(System.in) ; c6=input6.nextInt(); System.out.println("请输入在一行中输出几列运算式?"); Scanner input7=new Scanner(System.in) ; c7=input7.nextInt(); String []Repeat=new String[2*c6]; for(int w=0;w<c6;w++) { int w1; w1=w; //有无乘除法 if(c1==1) { e=rand.nextInt(4); } if(c1==2) { e=rand.nextInt(2); } //数值范围 a=rand.nextInt(c3)%(c3-c2+1)+c2; b=rand.nextInt(c3)%(c3-c2+1)+c2; //加减有无负数 if(c4==1)//有负数 { flag=0; } if(c4==2) { if(e==0) { if((a+b)>=0) { flag=0; } else { flag=1; } } if(e==1) { if((a-b)>=0) { flag=0; } else { flag=1; } } } //符号 if(e==0) { s="+"; f=a+b; } if(e==1) { s="-"; f=a-b; } if(e==2) { s="*"; f=a*b; } if(e==3) { if(b!=0) { if(c5==1) { s="/"; f=a/b; } if(c5==2) { if(a%b==0) { s="/"; f=a/b; } if(a%b!=0) { flag=1; } } } } //判断重复 if(a<0.0&&b>=0.0) { Repeat[w]="("+a+")"+s+b; } if(a>=0.0&&b<0.0) { Repeat[w]=a+s+"("+b+")"; } if(a<0.0&&b<0.0) { Repeat[w]="("+a+")"+s+"("+b+")"; } if(a>=0.0&&b>=0.0) { Repeat[w]=a+s+b; } for(int w2=0;w2<w1;w2++) { if(Repeat[w].equals(Repeat[w2])) { flag =1; } else {flag =0;} } //打印 if(flag==0) { if((w+1)%c7==0) { for(int k=0;k<10000000;k++) { String inputx=JOptionPane.showInputDialog(Repeat[w]+"="+"请输入计算结果"); if(inputx!=null&&!inputx.equals("")) { d=Double.parseDouble(inputx); break; } } if(d==f) { System.out.println(Repeat[w]+"="+d+"正确"); m++; } if(d!=f) { System.out.println(Repeat[w]+"="+d+"不正确"); } } else { for(int k=0;k<10000000;k++) { String inputx=JOptionPane.showInputDialog(Repeat[w]+"="+"请输入计算结果"); if(inputx!=null&&!inputx.equals("")) { d=Double.parseDouble(inputx); break; } } if(d==f) { System.out.print(Repeat[w]+"="+d+"正确"); m++; } if(d!=f) { System.out.print(Repeat[w]+"="+d+"不正确"); } } } if(flag==1) { c6++; } } System.out.println("共"+c6+"道题"+" "+m+"道题正确"); } if(c==2) { System.out.println("请输入选择:1 、有乘除法 2、无乘除法"); Scanner input1=new Scanner(System.in) ; c1=input1.nextInt(); System.out.println("请输入数值范围的前域 "); Scanner input2=new Scanner(System.in) ; c2=input2.nextInt(); System.out.println("请输入数值范围的后域"); Scanner input3=new Scanner(System.in) ; c3=input3.nextInt(); /* System.out.println("请输入选择:1、加减有负数 2、加减无负数"); Scanner input4=new Scanner(System.in) ; c4=input4.nextInt(); System.out.println("请输入选择:1、除法有余数 2、除法无余数"); Scanner input5=new Scanner(System.in) ; c5=input5.nextInt();*/ System.out.println("请输入出题数量"); Scanner input6=new Scanner(System.in) ; c6=input6.nextInt(); System.out.println("请输入在一行中输出几列运算式?"); Scanner input7=new Scanner(System.in) ; c7=input7.nextInt(); System.out.println("请输入选择: 1、有括号 2、无括号"); Scanner input8=new Scanner(System.in) ; c8=input8.nextInt(); //有无乘除法 if(c1==1) { e=rand.nextInt(4); } if(c1==2) { e=rand.nextInt(2); } //数值范围 a=rand.nextInt(c3)%(c3-c2+1)+c2; b=rand.nextInt(c3)%(c3-c2+1)+c2; String []Repeat=new String[2*c6]; if(e==0) { s="+"; g=a+b; } if(e==1) { s="-"; g=a-b; } if(e==2) { s="*"; g=a*b; } if(e==3) { if(b==0) { flag=1; } if(b!=0) { flag=0; s="/"; g=a/b; } } //出题数量 for(int w=0;w<c6;w++) { int p;//0为在原来基础上前面加数,1则是在后面加数 int ws;//几位数的运算 ws=rand.nextInt(8); Repeat[w]=a+s+b; if(c8==1)//有括号 { for(int w1=0;w1<ws;w1++) { d1=rand.nextInt(c3)%(c3-c2+1)+c2; p=rand.nextInt(2); if(c1==1) { e=rand.nextInt(4); } if(c1==2) { e=rand.nextInt(2); } if(e==0) { s="+"; g=d1+g; } if(e==1) { s="-"; if(p==0) { g=d1-g; } if(p==1) { g=g-d1; } } if(e==2) { s="*"; g=d1*g; } if(e==3) { if(b==0||g==0) { flag=1; } if(b!=0&&g!=0) { flag=0; s="/"; if(p==0) { g=d1/g; } if(p==1) { g=g/d1; } } } if(p==0) { Repeat[w]=d1+s+"("+Repeat[w]+")"; } if(p==1) { Repeat[w]="("+Repeat[w]+")"+s+d1; } } } if(c8==2)//无括号 { int length=0; String [][]Repeat1=new String[2*c6][100]; Repeat1[w][0]=""+a; Repeat1[w][1]=s; Repeat1[w][2]=""+b; for(int w1=0;w1<ws;w1++) { d1=rand.nextInt(c3)%(c3-c2+1)+c2; p=rand.nextInt(2); if(c1==1) { e=rand.nextInt(4); } if(c1==2) { e=rand.nextInt(2); } if(e==0) { s="+"; } if(e==1) { s="-"; } if(e==2) { s="*"; } if(e==3) { if(b==0) { flag=1; } if(b!=0) { flag=0; s="/"; } } if(p==0) { int sl=0;//实际长度 Repeat[w]=d1+s+Repeat[w]; length=Repeat1[w].length; for(int xx=0;xx<length;xx++) { String ss=""; ss=Repeat1[w][xx]; if(ss!=null&&!ss.equals("")) { sl++; } else { break; } } for(int l=0;l<sl;l++) { Repeat1[w][l+2]=Repeat1[w][l]; } Repeat1[w][0]=""+d1; Repeat1[w][1]=s; } if(p==1) { int sl=0; Repeat[w]=Repeat[w]+s+d1; length=Repeat1[w].length; for(int xx=0;xx<length;xx++) { String ss=""; ss=Repeat1[w][xx]; if(ss!=null&&!ss.equals("")) { sl++; } else { break; } } Repeat1[w][sl]=s; Repeat1[w][sl+1]=""+d1; } } //计算结果 int []ns=new int[10]; int []nf=new int[9]; int ll=(Repeat1[w].length); int sl=0; for(int xx=0;xx<ll;xx++) { String ss=""; ss=Repeat1[w][xx]; if(ss!=null&&!ss.equals("")) { sl++; } else { break; } } for(int l1=0;l1<sl;l1++) { if(l1%2==0) { ns[l1/2]=Integer.parseInt(Repeat1[w][l1]); } if(l1%2!=0) { nf[l1/2]=Repeat1[w][l1].charAt(0); } } if(c1==1) { } if(c1==2) { g=ns[0]; for(int l2=1;l2<(sl/2+1);l2++) { if(nf[l2-1]==43) { g=g+ns[l2]; } if(nf[l2-1]==45) { g=g-ns[l2]; } } } } //判断重复 int w3=w; for(int w2=0;w2<w3;w2++) { if(Repeat[w].equals(Repeat[w2])) { flag =1; } else {flag =0;} } //打印 if(flag==1) { c6++; } if(flag==0) { if((w+1)%c7==0) { System.out.println(Repeat[w]+"="+g+" "); } else { System.out.print(Repeat[w]+"="+g+" "); } } } } if(c==3) { break; } } } }
运行结果截图
编程总结分析
每次拿到题目,都不能冷静分析思考,这次结对编程,何同学是主力,在讨论的过程中,我发现了自身的很多问题,如思考的不全面
项目计划总结
姓名:张一博 日期:2016/3/26
听课 | 编写代码 | 阅读课本 | 准备考试 | 讨论设计思想 | 查阅资料 | 日总计 | |
周日3.20 | |||||||
周一3.21 | 100 | 33 | 133 | ||||
周二3.22 | 25 | 25 | |||||
周三3.23 | 118 | 55 | 40 | 213 | |||
周四3.24 | 109 | 20 | 129 | ||||
周五3.25 | 207 | 35 | 242 | ||||
周六3.26 | 153 | 153 | |||||
周总计 | 100 | 587 | 58 | 55 | 95 | 895 |
学生:张一博 日期:2016/3/26
教师:王建民 课程:软件工程概论
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 | C | U |
3/21 | 8:00 | 9:50 | 10 | 100 | 听课 | 下课,休息 | ||
19:05 | 19:38 | 0 | 33 | 阅读构建之法 | ||||
3/22 | 21:44 | 22:09 | 0 | 25 | 阅读梦断代码 | |||
3/23 | 16:02 | 20:30 | 55 | 213 | 讨论设计思想查资料,写程序 | 吃饭,休息,聊天 | ||
3/24 | 15:40 | 18:04 | 15 | 129 | 编程序,查资料 | 休息,玩手机 | ||
3/25 | 16:30 | 21:36 | 64 | 242 | 编程序,查资料 | 吃饭,休息 | ||
3/26 | 9:09 | 11:30 | 10 | 71 | 写代码 | 休息聊天 | ||
13:30 | 15:00 | 8 | 82 | 优化整理程序 | 聊天,休息 |
姓名:张一博 日期:2016/3/26
教师:王建民 程序:四则运算3
日期 | 编号 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 | 缺陷类型 |
3/23 | 1 | 编码 | 设计 | 1min | 程序打印方式 | 20 |
描述 | 程序打印方式不正确 | |||||
3/23 | 2 | 编码 | 编译 | 5min | 数组溢出 | 20 |
描述 | 用于无括号四则运算的的数组溢出 | |||||
3/24 | 3 | 编码 | 编译 | 10min | 二维数组实际长度 | 20 |
描述 | 实际长度不正确 | |||||
3/24 | 4 | 编码 | 编译 | 5min | 运算符转换为int | 20 |
描述 | string“+”、“-”转换为int出错 | |||||
3/25 | 5 | 编码 | 设计 | 5min | 20 | |
描述 | 用户输入“”出错 | |||||
3/25 | 6 | 编码 | 设计 | 5min | 20 | |
描述 | 无括号四则运算结果输出错误 | |||||
3/25 | 7 | 编码 | 编译 | 5min | 20 | |
描述 | ss!=null&&!ss.equals(""),,漏掉! |
相关文章推荐
- 删表空间及数据文件
- 分析system_call中断处理过程
- Ubuntu14.04后台进程Nohup
- 欢迎使用CSDN-markdown编辑器
- 第五课_课后习题解答
- TSC条码打印机亮红灯解决办法!
- 递归经典问题详解
- 《Linux内核分析》 第五节 扒开系统调用的三层皮(下)
- 欢迎使用CSDN-markdown编辑器
- 利用ip helper-address配置DHCP
- Info.plist和pch文件的作用,UIApplication,iOS程序的启动过程,AppDelegate 方法解释,UIWindow,生命周期方法
- 系统缓冲区、内核缓冲区、IO库操作本身的缓冲区 之间联系
- 如何在 Git 里撤销(几乎)任何操作
- 113. Path Sum II
- java代理、cglib、java proxy
- 推荐一个C#调用winapi的帮助网站
- Java设计模式之“抽象工厂模式“
- Xilinx SRIO ID
- PAT (Advanced Level) Practise 1101 Quick Sort (25)
- objective-c C类型数组