四则运算(构建之法中提到的)
一:程序的设计思想(重新编辑了下2016.3.12 20:21/2016 3.15 13:27)
1)第一个版本:只有两个随机整数和符号的生成
2)改善:添加生成30个算术的循环,支持真分数的四则运算,添加减法运算中的限制(默认:结果为正,不做负数结果的运算),添加除法的限制(分母不为零)
二:源程序代码
第一版(上传时间:2016.3.10 14:26):
//四则运算 初始版本(不管任何条件,只是生成两个数和一个符号)
//毛雯雯20143066 2016.3.10
import java.util.Random;
public class CalculateOfFour_1
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
int a;
Random rand1 = new Random();
a = rand1.nextInt(99)+0;
int b;
Random rand2 = new Random();
b = rand2.nextInt(99)+0;
int c;
Random rand3 = new Random();
c = rand3.nextInt(4);
switch(c)
{
case(0):
{
System.out.print(a);
System.out.print('+');
System.out.print(b);
System.out.println(" ");break;
}
case(1):
{
System.out.print(a);
System.out.print('-');
System.out.print(b);
System.out.println(" ");break;
}
case(2):
{
System.out.print(a);
System.out.print('*');
System.out.print(b);
System.out.println(" "); break;
}
case(3):
{
System.out.print(a);
System.out.print('/');
System.out.print(b);
System.out.println(" ");break;
}
}
}
}
第二版源程序(2016.3.15 13:29)
//四则运算 初始版本(不管任何条件,只是生成两个数和一个符号) 出现的问题:忘记加break,随机数的表示
//毛雯雯20143066 2016.3.10
//进一步版本(添加循环,改善显示的结果的视觉效果(每五行换行),减数大于被减数,分母不为零,真分数的四则运算)
import java.util.Random;
public class CalculateOfFour_1
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
int i;
for(i=1;i<=30;i++)
{
////////两个整数生成///////////////
//左边的数
int a;
Random rand1 = new Random();
a = rand1.nextInt(100)+0; //指0-99的数,包括0和99
//右边的数
int b;
Random rand2 = new Random();
b = rand2.nextInt(100)+0;
/////////整数生成/////////////////
////////真分数生成/////////////////
//分子
int x;
Random rand4 = new Random();
x = rand4.nextInt(100)+0;
//分母
int y;
Random rand5 = new Random();
y = rand5.nextInt(100)+1;
if(x>y)
{
int r;
r = x;
x = y;
y = r;
}
for(int j=2;j<=x;j++)
{
if(x%j==0&&y%j==0)
{
x = x/j;
y = y/j;
}
}
//分子
int p;
Random rand6 = new Random();
p = rand6.nextInt(100)+0;
//分母
int q;
Random rand7 = new Random();
q = rand7.nextInt(100)+1;
if(p>q)
{
int r;
r = p;
p = y;
q = r;
}
for(int j=2;j<=p;j++)
{
if(p%j==0&&q%j==0)
{
p = p/j;
q = q/j;
}
}
////////真分数生成/////////////////
//整数和真分数的选择
int t;
Random rand8 = new Random();
t = rand8.nextInt(5);
//符号
int c;
Random rand3 = new Random();
c = rand3.nextInt(4);
if(t!=0)
{
switch(c)
{
case(0):
{
System.out.print(a);
System.out.print('+');
System.out.print(b);
System.out.println("= ");break;
}
case(1):
{
if(a<b)
{
int d;
d = a;
a = b;
b = d;
} //防止小学生不会算负数而添加的六行代码,若无需此段代码,可注释掉
System.out.print(a);
System.out.print('-');
System.out.print(b);
System.out.println("= ");break;
}
case(2):
{
System.out.print(a);
System.out.print('*');
System.out.print(b);
System.out.println("= "); break;
}
case(3):
{
while(b==0)
b = rand2.nextInt(100)+0; // 保证分母不为零
System.out.print(a);
System.out.print('/');
System.out.print(b);
System.out.println("= ");break;
}
}
if(i%5==0)
System.out.println();
}
else
{
switch(c)
{
case(0):
{
System.out.print(x);
System.out.print('/');
System.out.print(y);
System.out.print('+');
System.out.print(p);
System.out.print('/');
System.out.print(q);
System.out.println("= ");break;
}
case(1):
{
if(a<b)
{
int d;
d = a;
a = b;
b = d;
} //防止小学生不会算负数而添加的六行代码,若无需此段代码,可注释掉
System.out.print(x);
System.out.print('/');
System.out.print(y);
System.out.print('-');
System.out.print(p);
System.out.print('/');
System.out.print(q);
System.out.println("= ");break;
}
case(2):
{
System.out.print(x);
System.out.print('/');
System.out.print(y);
System.out.print('*');
System.out.print(p);
System.out.print('/');
System.out.print(q);
System.out.println("= "); break;
}
case(3):
{
while(b==0)
b = rand2.nextInt(100)+0; // 保证分母不为零
System.out.print(x);
System.out.print('/');
System.out.print(y);
System.out.print(' ');
System.out.print('/');
System.out.print(' ');
System.out.print(p);
System.out.print('/');
System.out.print(q);
System.out.println("= ");break;
}
}
if(i%5==0)
System.out.println();
}
}
}
}
第二版改善(2016.3.15 21:54)
//四则运算 初始版本(不管任何条件,只是生成两个数和一个符号) 出现的问题:忘记加break,随机数的表示
//毛雯雯20143066 2016.3.10
//进一步版本(添加循环,改善显示的结果的视觉效果(每五行换行),减数大于被减数,分母不为零,真分数的四则运算)
import java.util.Random;
public class CalculateOfFour_1
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
int i;
for(i=1;i<=10000;i++)
{
////////两个整数生成///////////////
//左边的数
int a;
Random rand1 = new Random();
a = rand1.nextInt(100)+0; //指0-99的数,包括0和99
//右边的数
int b;
Random rand2 = new Random();
b = rand2.nextInt(100)+0;
/////////整数生成/////////////////
////////真分数生成/////////////////
//分子
int x;
Random rand4 = new Random();
x = rand4.nextInt(100)+1;
//分母
int y;
Random rand5 = new Random();
y = rand5.nextInt(100)+1;
if(x>y)
{
int r;
r = x;
x = y;
y = r;
}
if(x==1&&y==1)
{
y=y+1;
}
for(int j=2;j<=x;j++)
{
if(x%j==0&&y%j==0)
{
x = x/j;
y = y/j;
j = 1;
}
}
//分子
int p;
Random rand6 = new Random();
p = rand6.nextInt(100)+1;
//分母
int q;
Random rand7 = new Random();
q = rand7.nextInt(100)+1;
if(p>q)
{
int r1;
r1 = p;
p = q;
q = r1;
}
if(p==1&&q==1)
{
q=q+1;
}
for(int j=2;j<=p;j++)
{
if(p%j==0&&q%j==0)
{
p = p/j;
q = q/j;
j = 1;
}
}
////////真分数生成/////////////////
//整数和真分数的选择
int t;
Random rand8 = new Random();
t = rand8.nextInt(5);
//符号
int c;
Random rand3 = new Random();
c = rand3.nextInt(4);
if(t==0)
{
switch(c)
{
case(0):
{
System.out.println(a+"+"+b+"= ");break;
}
case(1):
{
if(a<b)
{
int d;
d = a;
a = b;
b = d;
} //防止小学生不会算负数而添加的六行代码,若无需此段代码,可注释掉
System.out.println(a+"-"+b+"= ");
break;
}
case(2):
{
System.out.println(a+"*"+b+"= "); break;
}
case(3):
{
while(b==0)
b = rand2.nextInt(100)+0; // 保证分母不为零
System.out.println(a+"/"+b+"= ");break;
}
}
if(i%5==0)
System.out.println();
}
else
{
switch(c)
{
case(0):
{
System.out.println(x+"/"+y+"+"+p+"/"+q+"= ");
break;
}
case(1):
{
if(a<b)
{
int d;
d = a;
a = b;
b = d;
} //防止小学生不会算负数而添加的六行代码,若无需此段代码,可注释掉
System.out.println(x+"/"+y+"-"+p+"/"+q+"= ");break;
}
case(2):
{
System.out.println(x+"/"+y+" "+"*"+" "+p+"/"+q+"= ");break;
}
case(3):
{
while(b==0)
b = rand2.nextInt(100)+0; // 保证分母不为零
System.out.println(x+"/"+y+" "+"/"+" "+p+"/"+q+"= ");break;
}
}
if(i%5==0)
System.out.println();
}
}
}
}
三:运行结果截图
第一版的截图
第二版的截图
第二版改善的截图
四:分析一下个人上课未按时完成的原因
这里应该是要解释一下课下没有及时完成的原因了,由于自己对编程的不那么热爱和自己的各种借口,把最简单的第一版本拖延到了交作业的当天,不仅如此,打开JAVA之后,发现自己什么都不会了。不过,经过这次“都忘了”的体验,下次会及时完成作业的!而且是尽早。
问题:第二版中,对什么时候产生整数运算和真分数运算的循环控制的不是很好。
第二版改善中,将真分数彻底弄对了!!!!