java自动生成四则运算+源码

1.需求分析:


为了对学生的算数进行锻炼,家长每天给孩子出题成为一个难题,需要做出一个程序,每天生成一定数量且不重复的题目,分解家长们的压力。

2. 功能设计:


2.1 基本功能:
  • 自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内------>实现

  • 剔除重复算式。 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式------>实现

  • 题目数量可定制------>实现

  • 相关参数可控------>实现

    1. 是否包含乘法和除法
    2. 操作数数值范围可控(如操作数 在100以内 还是1000以内)
    3. 操作数是否含负数
  • 生成的运算题存储到外部文件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. 测试运行:


测试01

测试02

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


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);
			}*/
			
		}	
		}
	//学号那个循环的截止}
}
}
  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值