四则运算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; //4:00 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 |
优化整理程序 |
聊天,休息 |
|
|
缺陷记录日志
日期 | 编号 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 | 缺陷类型 |
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(""),,漏掉! |
附工作照片
原文:http://www.cnblogs.com/qianxia/p/5322056.html