1.需求分析:
为了对学生的算数进行锻炼,家长每天给孩子出题成为一个难题,需要做出一个程序,每天生成一定数量且不重复的题目,分解家长们的压力。
2. 功能设计:
2.1 基本功能:
-
自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内------>实现
-
剔除重复算式。 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式------>实现
-
题目数量可定制------>实现
-
相关参数可控------>实现
- 是否包含乘法和除法
- 操作数数值范围可控(如操作数 在100以内 还是1000以内)
- 操作数是否含负数
-
生成的运算题存储到外部文件result.txt中------->实现
2.2 拓展功能:
1. 自动生成答案
2. 添加学号,并为每个学号生成不同的试题
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. 测试运行:
5. 代码解释
第一个操作数的选择
//第一个操作数的选择
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 }
```
运算符号的选择
```java
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. 总结
7. psp
源码:
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.Scanner;
public class text_005 {
public static void main(String[] args) throws FileNotFoundException {
PrintStream ps = new PrintStream("d:/result.txt");
int c;
Scanner t=new Scanner(System.in);
System.out.print("请输入题目个数:");
int tg=t.nextInt();
//控制题目个数
System.out.print("请输入操作数的范围(如 100,1000等):");
int tf=t.nextInt();
//控制题目范围
System.out.println("请选择是否有负数:1:有 0:没有");
int zf=t.nextInt();
//控制正负数
System.out.println("请选择是否包含*或者/:2:否 4:是 ");
int fu=t.nextInt();
//控制符号
System.setOut(ps);
//添加打印学号
//for(int j=0;j<2;j++) {
//System.out.println(2019000+j);
for(int i=0;i<tg;i++) {//循环控制题目个数
//第一个操作数的选择
int a=(int)(Math.random()*tf+1);
if(zf==1) {//有负数
int p=(int) (Math.random()*2);
switch(p) {
case 0:a=a*(-1);//取负数
System.out.print(a);break;
case 1:
System.out.print(a);break;
}
}
if(zf==0) {//没有负数
System.out.print(a);
}
if(fu==2) {//选择两个字符‘+’‘-’
int k=(int)(Math.random()*2);
switch(k) {//随机选择运算符
case 0:System.out.print("+");
break;
case 1:System.out.print("-");
break;
}
int b=(int)(Math.random()*tf+1);
if(zf==1) {//有负数
int p=(int) (Math.random()*2);
switch(p) {
case 0:b=b*(-1);//取负数
System.out.print(b);break;
case 1:
System.out.print(b);break;
}
}
if(zf==0) {//没有负数
System.out.print(b);
}
System.out.println("=");
/*
//运算结果
if(k==0) {c=a+b;System.out.println(c);}
if(k==1){c=a-b; System.out.println(c);}
*/
}
if(fu==4) {//四个字符的‘+’‘-’‘*’‘/’
int k=(int)(Math.random()*4+1);
switch(k) {//随机选择运算符
case 1:System.out.print("+");break;
case 2:System.out.print("-");break;
case 3:System.out.print("*");break;
case 4:System.out.print("/");break;
}
//第二个操作数的选择
int b=(int) (Math.random()*tf+1);
if(zf==1) {//有负数
int p=(int) (Math.random()*2);
switch(p) {
case 0:b=b*(-1);//取负数
System.out.print(b);break;
case 1:
System.out.print(b);break;
}
}
if(zf==0) {//没有负数
System.out.print(b);
}
//等号
System.out.println("=");
/*
//运算结果
if(k==1) {
c=a+b;System.out.println(c);
}
if(k==2) {
c=a-b;System.out.println(c);
}
if(k==3) {
c=a*b;System.out.println(c);
}
if(k==4) {
c=a/b;System.out.println(c);
}*/
}
}
//学号那个循环的截止}
}
}