定制小学算术题
写一个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。

浙公网安备 33010602011771号