定制小学算术题

图片名称

写一个Main函数,这个函数实现了

  • 生成四则运算题
  • 题目避免重复
  • 定制题目数量
  • 定制操作数个数
  • 定制操作数取值范围
  • 定制运算符
  • 定制括号
import java.util.*;
public class Main{
	public static void main(String[] args) {
        String[] ss=new String[100010];
        //题目避免重复
        
	Scanner sc=new Scanner(System.in);
	System.out.println("请输入式子打印数量:");
	int M=sc.nextInt();
	while(M>100000) {
		System.out.println("输入数量太大,请重新输入");
		M=sc.nextInt();
	}
	//定制题目数量
        
	System.out.println("请输入每个式子的参与运算的数的个数:");
	int num=sc.nextInt();
	//定制操作数个数
        
        System.out.println("请输入每个式子的参与操作数取值范围:");
	int l=sc.nextInt(),r=sc.nextInt();
        //定制每个式子的参与操作数取值范围
        
	System.out.println("请输入运算符数量(最少为1,上限为4)");
	int chnum=sc.nextInt();
	int chs[]=new int[4];
	if(chnum==4) {
		chs[0]=1;
		chs[1]=2;
		chs[2]=3;
		chs[3]=4;
	}
	else {
		System.out.println("请输入"+chnum+"个指定的运算符");
		System.out.println("0代表+,1代表-,2代表*,3代表/");
		for(int i=0;i<chnum;i++) chs[i]=sc.nextInt();
	}
        //定制运算符
        
	System.out.println("是否加上括号?(1是,0否)");
	int fl=sc.nextInt();
        int k=(int)(Math.random()*num);
	//定制括号
        
        int cnt=0;
	while(cnt<M) {
        String s=new String();
		for(int i=0;i<num;i++) {
			if(i==k&&fl==1) s+="(";
			int x=(int) (Math.random()*(r-l))+l;
			s+=x;
			
			if(i==k+1&&fl==1) s+=")";
			
			if(i<num-1) {
				int p=(int)(Math.random()*chnum);
				if(chs[p]==0) {
					s+="+";
				}
				else if(chs[p]==1) {
					s+="-";
				}
				else if(chs[p]==2) {
					s+="*";
				}
				else {
					s+="/";
				}
			}
		}
            boolean fc=false;
            for(int j=0;j<cnt;j++){
                if(ss[j].equals(s)){
                    fc=true;
                    break;
                }
            }
            if(fc==false){
            	ss[cnt]=s;
		System.out.println(s+"=");
		cnt++;
            }
	}

     }
}

显然一个函数功能这么多,肯定造成调试不方便,那么在这里进行优化,
把不同的功能进一步分解给函数去做,在大函数Main函数里只是调用其他函数的接口,这样程序调试起来就方便了,看起来也很nice。

posted @ 2021-09-22 21:00  zhuangzhongxu  阅读(60)  评论(0)    收藏  举报