1. 需求分析:
为了对学生的算数进行锻炼,家长每天给孩子出题成为一个难题,需要做出一个程序,每天生成一定数量且不重复的题目,分解家长们的压力。
2. 功能设计:
基本功能:
-
自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内------>实现
-
剔除重复算式。 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式------>实现
-
题目数量可定制------>实现
-
相关参数可控------>实现
-
是否包含乘法和除法
-
操作数数值范围可控(如操作数 在100以内 还是1000以内)
-
操作数是否含负数
-
-
生成的运算题存储到外部文件result.txt中------->实现
拓展功能:
自动生成答案
添加学号,并为每个学号生成不同的试题
3. 设计实现:
- 使用构造函数PrintStream Scanner ,PrintStream ps = new PrintStream("d:/result.txt");
- System.setOut(ps);调用此函数,可以将所有System.out.println();输出语句,打印到i我们创建的文件夹中
- Scanner t=new Scanner(System.in); 控制我们从键盘输入
- Math.random();产生随机不重复函数,我做了以下测试
1 /* 2 * 验证random会不会产生相同的随机数 3 * 做个10万次循环看看,发现结果为0 4 *java不像c,c会大概率产生相同的随机数,甚至会下次运行可能会和上次 5 * 产生的随机数是一样的,因此用C写得初始化一个时间种子,才能尽可能的保证随机数不相同 6 *java的random函数10万次运行都很难出现一次相同的随机数,所有random不产生重复函数 7 */ 8 public class text_002{ 9 public static void main(String args[]){ 10 int count = 0; 11 double first = 0; 12 double second = 0; 13 for(int i=0; i<99999; i++){ 14 first = Math.random(); 15 second = Math.random(); 16 if (first == second) 17 count ++; 18 } 19 System.out.print(count); 20 } 21 }
4. 测试运行:
基本加减法
四种运算符
自动生成100以内答案
四个运算符生成无限制答案
添加学号,并且给不同部分学号的生产不同的套题
5. 代码解释
- 生成的第一个操作数
1 //第一个操作数的选择 2 int a=(int)(Math.random()*tf+1); 3 4 if(zf==1) {//有负数 5 int p=(int) (Math.random()*2); 6 switch(p) { 7 case 0:a=a*(-1);//取负数 8 System.out.print(a);break; 9 case 1: 10 System.out.print(a);break; 11 } 12 } 13 if(zf==0) {//没有负数 14 System.out.print(a); 15 }
- 运算符号的选择
1 System.out.println("请选择是否包含*或者/:2:否 4:是 "); 2 int fu=t.nextInt(); 3 if(fu==2) {//选择两个字符‘+’‘-’ 4 int k=(int)(Math.random()*2); 5 switch(k) {//随机选择运算符 6 case 0:System.out.print("+"); 7 break; 8 case 1:System.out.print("-"); 9 break; 10 } 11 if(fu==4) {//四个字符的‘+’‘-’‘*’‘/’ 12 int k=(int)(Math.random()*4+1); 13 switch(k) {//随机选择运算符 14 case 1:System.out.print("+");break; 15 case 2:System.out.print("-");break; 16 case 3:System.out.print("*");break; 17 case 4:System.out.print("/");break; 18 }
- 等号右侧结果
1 //等号 2 3 System.out.print("="); 4 //运算结果 5 if(k==1) { 6 c=a+b;System.out.println(c); 7 } 8 if(k==2) { 9 c=a-b;System.out.println(c); 10 } 11 if(k==3) { 12 c=a*b;System.out.println(c); 13 } 14 if(k==4) { 15 c=a/b;System.out.println(c); 16 }
6. 总结
1 .控制题目个数 :for循环 |
||
2. 控制题目范围 :scanner传参 和随机函数相乘 |
||
3. 控制正负号:随机函数+switch产生随机正负数 |
||
4. 控制运算符号:随机函数+switch产生随机符号 |
7. PSP