一:题目要求:
1.是否有乘除法
2.是否有括号
3.取值范围
4.加减有无负数
5.除非有无余数
二.设计思想:
首先,整数的情况下,有乘除法,先写出生成算式的方法,随机生成两个数,数的范围有random.nextInt(大-小)+小来界定,随机生成了两个数用来表示算式运算的参数,然后随机生成一个0-4的数(不包括4)用if语句来判断0代表加法,1代表减法,2代表乘法3代表除法。生成了这三个数之后,就生成了一个算式,然后通过一个while循环来进行查重,如果遇见重复就继续重新生成三个数,然后下面进行if语句判断,是哪种运算法则,进行相应的if语句,加法和乘法直接输出结果,而当进行减法时,判断是否需要负数,如果需要负数的话直接进行结果输出,当不需要负数的时候,来进行两个数的判断,如果第一个数大于第二个数进行输出结果,当第一个数小于第二个数时通过while循环,重新生成一个两个数,然后在进行查重比较,再判断两个数的大小,如果第一个数大于第二个进行输出结果,循环结束,反之继续循环。当进行除法时,判断是否需要除数,如果需要除数直接进行输出结果,当不需要除数时,让第一个数除以第二个数,如果余数为0则进行输出结果,当余数不为0时,通过while循环重新生成两个数,然后进行查重,然后让第一个数除以第二个数,如果余数为0则直接输出结果,循环结束,如果余数不为0再进行循环。在整数的情况下,没有乘除法的时候,直接除去有乘法和除法的代码即可。然后是分数,分数则是生成四个随机数,第一个除以第二个表示第一个分数,第三个除以第四个表示第二个分数,然后同样生成0-4的分数来表示乘除法。然后进行查询,通过比较四个数的判断是否重复,如果重复则继续生成四个数,则继续执行下面,然后进行运算的判断,加法和乘法直接输出结果,只不过在分数部分,需要求前两个数的最大公约数,来进行分数的约分。减法和除法的思路和整数部分类似。
三.程序源代码:
package calculate2;
import java.util.*;
public class cal2 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner input=new Scanner(System.in);
int num=0;int little=0; int big=0; int select=0;int select2=0;
System.out.println("请输入需要打印的数量");
num=input.nextInt();
System.out.println("请输入最小范围");
little=input.nextInt();
System.out.println("请输入最大范围");
big=input.nextInt();
System.out.println("请选择:1.整数2.分数");
int type=input.nextInt();
if(type==1)
{
System.out.println("是否需要乘除法1.需要2.不需要");
select=input.nextInt();
if(select==1)
{
cc(little,big,num);
}
if(select==2)
{
jj(little,big,num);
}
}
if(type==2)
{
System.out.println("是否需要乘除法1.需要2.不需要");
select2=input.nextInt();
if(select2==1)
{
fscc(big,num);
}
if(select2==2)
{
fsjj(big,num);
}
}
}
public static void cc(int a,int b,int c) // 乘除
{
boolean flag=true;
boolean flag3=true;
Random random=new Random();
Scanner in=new Scanner(System.in);
int m[]=new int [1000];
int n[]=new int [1000];
int p[]=new int [1000];
System.out.println("减法是否有负数1.可以有2.无");
int fs=in.nextInt();
System.out.println("除法是否有余数1.可以有2.无");
int ys=in.nextInt();
for(int i=0;i<c;i++) //生成式子
{
m[i]=random.nextInt(4);
n[i]=random.nextInt(b-a)+a;
p[i]=random.nextInt(b-a)+a;
int r=i-1;
while(r>=0) // 判断重复,重新生成式子
{
if(m[i]==m[r]&&n[i]==n[r]&&p[i]==p[r])
{
m[i]=random.nextInt(4);
n[i]=random.nextInt(b-a)+a;
p[i]=random.nextInt(b-a)+a;
r=i;
}
else if(m[i]==2&&m[r]==2&&n[i]==p[r]&&n[r]==p[i])
{
m[i]=random.nextInt(4);
n[i]=random.nextInt(b-a)+a;
p[i]=random.nextInt(b-a)+a;
r=i;
}
else if(m[i]==0&&m[r]==0&&n[i]==p[r]&&p[i]==n[r])
{
m[i]=random.nextInt(4);
n[i]=random.nextInt(b-a)+a;
p[i]=random.nextInt(b-a)+a;
r=i;
}
r--;
}
if(m[i]==0)
{
System.out.println(n[i]+"+"+p[i]);
}
if(m[i]==1)
{
if(fs==1)
{
System.out.println(n[i]+"-"+p[i]);
}
else if(fs==2)
{
if(n[i]>=p[i])
{
System.out.println(n[i]+"-"+p[i]);
}
if(n[i]<p[i])
{
int j=i-1;
flag=true;
while(flag)
{
n[i]=random.nextInt(b-a)+a;
p[i]=random.nextInt(b-a)+a;
while(j>=0) // 重复,重新生成式子
{
if(n[i]==n[j]&&p[i]==p[j])
{
n[i]=random.nextInt(b-a)+a;
p[i]=random.nextInt(b-a)+a;
j=i;
}
j--;
}
if(n[i]>p[i])
{
System.out.println(n[i]+"-"+p[i]);
flag=false;
}
}
}
}
}
if(m[i]==2)
{
System.out.println(n[i]+"*"+p[i]);
}
if(m[i]==3)
{
if(ys==1) // 有余数
{
System.out.println(n[i]+"/"+p[i]);
}
if(ys==2) //没有余数
{
if(n[i]%p[i]==0)
{
System.out.println(n[i]+"/"+p[i]);
}
else if(n[i]%p[i]!=0)
{
flag3=true;
while(flag3)
{
n[i]=random.nextInt(b-a)+a;
p[i]=random.nextInt(b-a)+a;
int j=i-1;
while(j>=0) // 重复,重新生成式子
{
if(n[i]==n[j]&&p[i]==p[j])
{
n[i]=random.nextInt(b-a)+a;
p[i]=random.nextInt(b-a)+a;
j=i;
}
j--;
}
if(n[i]%p[i]==0) // 如果相除没有余数
{
System.out.println(n[i]+"/"+p[i]);
flag3=false;
}
}
}
}
}
}
}
public static void jj(int a,int b,int c) //加减
{
int u;
boolean flag=true;
Random random=new Random();
Scanner in=new Scanner(System.in);
int m[]=new int [1000];
int n[]=new int [1000];
int p[]=new int [1000];
System.out.println("有无负数1.可以有2.没有");
u=in.nextInt();
for(int i=0;i<c;i++)
{
m[i]=random.nextInt(2);
n[i]=random.nextInt(b-a)+a;
p[i]=random.nextInt(b-a)+a;
int r=i-1;
while(r>=0)
{
if(m[i]==m[r]&&n[i]==n[r]&&p[i]==p[r])
{
m[i]=random.nextInt(2);
n[i]=random.nextInt(b-a)+a;
p[i]=random.nextInt(b-a)+a;
r=i;
}
if(m[i]==0&&m[r]==0&&n[i]==p[r]&&p[i]==n[r])
{
m[i]=random.nextInt(2);
n[i]=random.nextInt(b-a)+a;
p[i]=random.nextInt(b-a)+a;
r=i;
}
r--;
}
if(u==1&&m[i]==0)
{
System.out.println(n[i]+"+"+p[i]);
}
if(u==1&&m[i]==1)
{
System.out.println(n[i]+"-"+p[i]);
}
if(u==2&&m[i]==0)
{
System.out.println(n[i]+"+"+p[i]);
}
if(u==2&&m[i]==1)
{
if(n[i]>p[i])
System.out.println(n[i]+"-"+p[i]);
if(n[i]<p[i])
{
flag=true;
while(flag)
{
n[i]=random.nextInt(b-a)+a;
p[i]=random.nextInt(b-a)+a;
int j=i-1;
while(r>=0) // 重复,重新生成式子
{
if(n[i]==n[j]&&p[i]==p[j])
{
n[i]=random.nextInt(b-a)+a;
p[i]=random.nextInt(b-a)+a;
j=i;
}
j--;
}
if(n[i]>=p[i])
{flag=false;}
}
System.out.println(n[i]+"-"+p[i]);
}
}
}
}
public static void fscc(int a,int c)
{
int x=0;int y=0;int z=0;
Random random=new Random();
Scanner in=new Scanner(System.in);
System.out.println("是否有负数1.可以有2.无");
int fs=in.nextInt();
System.out.println("是否有余数1.可以有2.无");
int ys=in.nextInt();
int m[]=new int [1000];
int n[]=new int[1000];
int o[]=new int[1000];
int p[]=new int[1000];
int q[]=new int[1000];
for(int i=0;i<c;i++)
{
m[i]=random.nextInt(4);
n[i]=random.nextInt(a)+1;
o[i]=random.nextInt(a)+1;
p[i]=random.nextInt(a)+1;
q[i]=random.nextInt(a)+1;
int r=i-1;
boolean flag=true;
boolean flag1=true;
while(flag)
{
if(n[i]>=o[i])
{
n[i]=random.nextInt(a)+1;
o[i]=random.nextInt(a)+1;
if(n[i]<o[i])
{
flag=false;
}
}
if(n[i]<o[i])
{
flag=false;
}
}
while(flag1)
{
if(p[i]>=q[i])
{
p[i]=random.nextInt(a)+1;
q[i]=random.nextInt(a)+1;
if(p[i]<q[i])
{
flag1=false;
}
}
if(p[i]<q[i])
{
flag1=false;
}
}
while(r>=0)
{
if(m[i]==m[r]&&n[i]==n[r]&&o[i]==o[r]&&p[i]==p[r]&&q[i]==q[r])
{
m[i]=random.nextInt(4);
n[i]=random.nextInt(a)+1;
o[i]=random.nextInt(a)+1;
p[i]=random.nextInt(a)+1;
q[i]=random.nextInt(a)+1;
r=i;
}
if(m[i]==0&&m[r]==0&&n[i]==n[r]&&o[i]==o[r]&&p[i]==p[r]&&q[i]==q[r])
{
m[i]=random.nextInt(4);
n[i]=random.nextInt(a)+1;
o[i]=random.nextInt(a)+1;
p[i]=random.nextInt(a)+1;
q[i]=random.nextInt(a)+1;
r=i;
}
if(m[i]==2&&m[r]==2&&n[i]==n[r]&&o[i]==o[r]&&p[i]==p[r]&&q[i]==q[r])
{
m[i]=random.nextInt(4);
n[i]=random.nextInt(a)+1;
o[i]=random.nextInt(a)+1;
p[i]=random.nextInt(a)+1;
q[i]=random.nextInt(a)+1;
r=i;
}
r--;
}
if(m[i]==0)
{
y=gongyue(p[i],q[i]);
z=gongyue(n[i],o[i]);
System.out.println(n[i]/z+"/"+o[i]/z+" + "+p[i]/y+"/"+q[i]/y);
}
if(m[i]==1)
{
x=gongbei(o[i],q[i]);
y=gongyue(p[i],q[i]);
z=gongyue(n[i],o[i]);
if(fs==1) //可以有负数
{
System.out.println(n[i]/z+"/"+o[i]/z+" - "+p[i]/y+"/"+q[i]/y);
}
if(fs==2) //没有负数
{
if(n[i]*x/o[i]>=p[i]*x/q[i])
{
System.out.println(n[i]/z+"/"+o[i]/z+" - "+p[i]/y+"/"+q[i]/y);
}
if(n[i]*x/o[i]<p[i]*x/q[i])
{
boolean flag2=true;
int j=i-1;
while(flag2)
{
n[i]=random.nextInt(a)+1;
o[i]=random.nextInt(a)+1;
p[i]=random.nextInt(a)+1;
q[i]=random.nextInt(a)+1;
while(j>=0)
{
if(n[i]==n[j]&&o[i]==o[j]&&p[i]==p[j]&&q[i]==q[j])
{
n[i]=random.nextInt(a)+1;
o[i]=random.nextInt(a)+1;
p[i]=random.nextInt(a)+1;
q[i]=random.nextInt(a)+1;
j=i;
}
j--;
}
if(n[i]*x/o[i]>=p[i]*x/q[i])
{
int y2=gongyue(p[i],q[i]);
int z2=gongyue(n[i],o[i]);
System.out.println(n[i]/z2+"/"+o[i]/z2+" - "+p[i]/y2+"/"+q[i]/y2);
flag2=false;
}
}
}
}
}//
if(m[i]==2)
{
y=gongyue(p[i],q[i]);
z=gongyue(n[i],o[i]);
System.out.println(n[i]/z+"/"+o[i]/z+" * "+p[i]/y+"/"+q[i]/y);
}
if(m[i]==3)
{
y=gongyue(p[i],q[i]);
z=gongyue(n[i],o[i]);
if(ys==1)
{
System.out.println(n[i]/z+"/"+o[i]/z+" / "+p[i]/y+"/"+q[i]/y);
}
if(ys==2)
{
int w1=n[i]*q[i];
int w2=p[i]*o[i];
if((w1%w2)==0)
{
System.out.println(n[i]/z+"/"+o[i]/z+" / "+p[i]/y+"/"+q[i]/y);
}
if((w1%w2)!=0)
{
int j=i-1;
boolean flag3=true;
while(flag3)
{
n[i]=random.nextInt(a)+1;
o[i]=random.nextInt(a)+1;
p[i]=random.nextInt(a)+1;
q[i]=random.nextInt(a)+1;
while(j>=0)
{
if(n[i]==n[j]&&o[i]==o[j]&&p[i]==p[j]&&q[i]==q[j])
{
n[i]=random.nextInt(a)+1;
o[i]=random.nextInt(a)+1;
p[i]=random.nextInt(a)+1;
q[i]=random.nextInt(a)+1;
j=i;
}
j--;
}
int w3=n[i]*q[i];
int w4=o[i]*p[i];
if((w3%w4)==0)
{
int y1=gongyue(p[i],q[i]);
int z1=gongyue(n[i],o[i]);
System.out.println(n[i]/z1+"/"+o[i]/z1+" / "+p[i]/y1+"/"+q[i]/y1);
flag3=false;
}
}
}
}
}
}
}
public static void fsjj(int a,int c)
{
int m[]=new int [1000];
int n[]=new int [1000];
int o[]=new int [1000];
int p[]=new int [1000];
int q[]=new int [1000];
int x=0;int y=0;int z=0;
Random random=new Random();
Scanner in=new Scanner(System.in);
int fs=0;
System.out.println("请选择是否负数1.可以有2.无");
fs=in.nextInt();
for(int i=0;i<c;i++)
{
m[i]=random.nextInt(2);
n[i]=random.nextInt(a)+1;
o[i]=random.nextInt(a)+1;
p[i]=random.nextInt(a)+1;
q[i]=random.nextInt(a)+1;
int r=i-1;
boolean flag=true;
boolean flag1=true;
while(flag)
{
if(n[i]>=o[i])
{
n[i]=random.nextInt(a)+1;
o[i]=random.nextInt(a)+1;
if(n[i]<o[i])
{
flag=false;
}
}
if(n[i]<o[i])
{
flag=false;
}
}
while(flag1)
{
if(p[i]>=q[i])
{
p[i]=random.nextInt(a)+1;
q[i]=random.nextInt(a)+1;
if(p[i]<q[i])
{
flag1=false;
}
}
if(p[i]<q[i])
{
flag1=false;
}
}
while(r>=0)
{
if(m[i]==m[r]&&n[i]==n[r]&&o[i]==o[r]&&p[i]==p[r]&&q[i]==q[r])
{
m[i]=random.nextInt(2);
n[i]=random.nextInt(a)+1;
o[i]=random.nextInt(a)+1;
p[i]=random.nextInt(a)+1;
q[i]=random.nextInt(a)+1;
r=i;
}
if(m[i]==0&&m[r]==0&&n[i]==n[r]&&o[i]==o[r]&&p[i]==p[r]&&q[i]==q[r])
{
m[i]=random.nextInt(2);
n[i]=random.nextInt(a)+1;
o[i]=random.nextInt(a)+1;
p[i]=random.nextInt(a)+1;
q[i]=random.nextInt(a)+1;
r=i;
}
if(m[i]==2&&m[r]==2&&n[i]==n[r]&&o[i]==o[r]&&p[i]==p[r]&&q[i]==q[r])
{
m[i]=random.nextInt(2);
n[i]=random.nextInt(a)+1;
o[i]=random.nextInt(a)+1;
p[i]=random.nextInt(a)+1;
q[i]=random.nextInt(a)+1;
r=i;
}
r--;
}
if(m[i]==0)
{
y=gongyue(p[i],q[i]);
z=gongyue(n[i],o[i]);
System.out.println(n[i]/z+"/"+o[i]/z+" + "+p[i]/y+"/"+q[i]/y);
}
if(m[i]==1)
{
x=gongbei(o[i],q[i]);
y=gongyue(p[i],q[i]);
z=gongyue(n[i],o[i]);
if(fs==1) //可以有负数
{
System.out.println(n[i]/z+"/"+o[i]/z+" - "+p[i]/y+"/"+q[i]/y);
}
if(fs==2) //没有负数
{
if(n[i]*x/o[i]>=p[i]*x/q[i])
{
System.out.println(n[i]/z+"/"+o[i]/z+" - "+p[i]/y+"/"+q[i]/y);
}
if(n[i]*x/o[i]<p[i]*x/q[i])
{
boolean flag2=true;
int j=i-1;
while(flag2)
{
n[i]=random.nextInt(a)+1;
o[i]=random.nextInt(a)+1;
p[i]=random.nextInt(a)+1;
q[i]=random.nextInt(a)+1;
while(j>=0)
{
if(n[i]==n[j]&&o[i]==o[j]&&p[i]==p[j]&&q[i]==q[j])
{
n[i]=random.nextInt(a)+1;
o[i]=random.nextInt(a)+1;
p[i]=random.nextInt(a)+1;
q[i]=random.nextInt(a)+1;
j=i;
}
j--;
}
if(n[i]*x/o[i]>=p[i]*x/q[i])
{
System.out.println(n[i]/z+"/"+o[i]/z+" - "+p[i]/y+"/"+q[i]/y);
flag2=false;
}
}
}
}
}//
}
}
public static int gongbei(int x,int y)
{
int z;
for(z=x;;z++)
{
if(z%x==0&&z%y==0)
break;
}
return z;
}
public static int gongyue(int x,int y)
{
int z;
for(z=x;z>0;z--)
{
if(x%z==0&&y%z==0)
break;
}
return z;
}
}
四:结果截图:
五.PSP0级记录
项目计划:
时间记录:
缺陷记录: