要求:完成两个数的加减乘除、取余运算以及求最大公约数和求最小公倍数,
此程序设计可以使程序便于拓展,当需要增加一个新的运算时,只需要添加一个类基础eryuan,以及修改main方法中的switch语句即可,不需要修改eryuan类。
下方提供了两对固定值的测试,也提供了交互键盘输入测试,要注意,下面这些方法要在同一个packge。
(1)抽象运算方法(新建名为eryuan的class)
public abstract class eryuan{
private int num1;
private int num2;
private int max;
private int min;
public abstract int eryuan();
public int getNum1() {
return num1;
}
public void setNum1() {
this.num1 = num1;
}
public int getNum2() {
return num2;
}
public void setNum2() {
this.num2 = num2;
}
public eryuan(){
super();
}
public eryuan(int num1,int num2){
super();
this.num1 = num1;
this.num2 = num2;
}
}
(2)继承生成加法类(新建名为add的class )
public class add extends eryuan {
@Override
public int eryuan() {
return getNum1() + getNum2();
}
public add() {
super(1,1);
}
public add(int num1,int num2) {
super(num1,num2);
}
}
(3)继承生成除法类(新建名为 Div 的class)
public class Div extends eryuan {
@Override
public int eryuan() {
return getNum1() / getNum2();
}
public Div() {
super(1,1);
}
public Div(int num1,int num2) {
super(num1,num2);
}
}
(4)继承生成减法类(新建名为 Sub 的class)
public class Sub extends eryuan {
@Override
public int eryuan() {
return getNum1() - getNum2();
}
public Sub() {
super(1,1);
}
public Sub(int num1,int num2) {
super(num1,num2);
}
}
(5)继承生成乘法类(新建名为 Mul 的class)
public class Mul extends eryuan {
@Override
public int eryuan() {
return getNum1() * getNum2();
}
public Mul() {
super(1,1);
}
public Mul(int num1,int num2) {
super(num1,num2);
}
}
(6)继承生成取余类(新建名为quyu 的class)
public class quyu extends eryuan{
@Override
public int eryuan() {
return getNum1() % getNum2();
}
public quyu() {
super(1,1);
}
public quyu(int num1,int num2) {
super(num1,num2);
}
}
(7)继承生成最小公倍数类(新建名为 Gongbei 的class)
public class Gongbei extends eryuan {
@Override
public int eryuan() {
int a = getNum1();
int b = getNum2();
int c = a * b;
while(a - b!= 0) {
if(a > b)
a = a-b;
else b =b-a;
}
return c / b;
}
public Gongbei() {
super(1,1);
}
public Gongbei(int num1,int num2) {
super(num1,num2);
}
}
(8)继承生成最大公约数类(新建名为 Gongyu 的class)
public class Gongyu extends eryuan {
@Override
public int eryuan() {
int a = getNum1();
int b = getNum2();
while(a - b!= 0) {
if(a > b)
a = a-b;
else b =b-a;
}
return b;
}
public Gongyu() {
super(1,1);
}
public Gongyu(int num1,int num2) {
super(num1,num2);
}
}
(9)无交互的运行类(新建名为 eytest 的class)main方法,固定值输出
public class eytest {
public static void main(String [] args) {
int x, y;
//第一组实验测试
System.out.println("第一组数测试");
x=15;y=12;
eryuan er1,er2,er3,er4,er5,er6,er7;
er1 = new add(x,y);
System.out.printf("%d + %d = %d\n", er1.getNum1(),er1.getNum2(),
er1.eryuan());
er2 = new Sub(x,y);
System.out.printf("%d - %d = %d\n", er2.getNum1(),er2.getNum2(),
er2.eryuan());
er3 = new Mul(x,y);
System.out.printf("%d * %d = %d\n", er3.getNum1(),er3.getNum2(),
er3.eryuan());
er4 = new Div(x,y);
System.out.printf("%d / %d = %d\n", er4.getNum1(),er4.getNum2(),
er4.eryuan());
er5 = new quyu(x,y);
System.out.printf("%d 取余 %d = %d\n", er5.getNum1(),er5.getNum2(),
er5.eryuan());
er6 = new Gongyu(x,y);
System.out.printf("%d 和 %d 的最大公约数= %d\n", er6.getNum1(),er6.getNum2(),
er6.eryuan());
er7 = new Gongbei(x,y);
System.out.printf("%d 和 %d 的最小公倍数= %d\n", er7.getNum1(),er7.getNum2(),
er7.eryuan());
//第二组实验测试
System.out.println("第二组数测试");
x=25;y=22;
er1 = new add(x,y);
System.out.printf("%d + %d = %d\n", er1.getNum1(),er1.getNum2(),
er1.eryuan());
er2 = new Sub(x,y);
System.out.printf("%d - %d = %d\n", er2.getNum1(),er2.getNum2(),
er2.eryuan());
er3 = new Mul(x,y);
System.out.printf("%d * %d = %d\n", er3.getNum1(),er3.getNum2(),
er3.eryuan());
er4 = new Div(x,y);
System.out.printf("%d / %d = %d\n", er4.getNum1(),er4.getNum2(),
er4.eryuan());
er5 = new quyu(x,y);
System.out.printf("%d 取余 %d = %d\n", er5.getNum1(),er5.getNum2(),
er5.eryuan());
er6 = new Gongyu(x,y);
System.out.printf("%d 和 %d 的最大公约数= %d\n", er6.getNum1(),er6.getNum2(),
er6.eryuan());
er7 = new Gongbei(x,y);
System.out.printf("%d 和 %d 的最小公倍数= %d\n", er7.getNum1(),er7.getNum2(),
er7.eryuan());
}
}
代码运行结果:

(10)有交互的运行类(新建名为 eytest 的class)main方法,键盘输入,有菜单、可以进行无限组测试等交互测试
import java.util.Scanner;
public class eryuantest {
public static void main(String [] args) {
String w="";
do {
System.out.println("--------请选择运算-------------");
System.out.println("1.加法运算");
System.out.println("2.减法运算");
System.out.println("3.乘法运算");
System.out.println("4.除法运算"); System.out.println("5.取余运算");
System.out.println("6.求最大公约数");
System.out.println("7.求最小公倍数");
System.out.println("------------------------");
Scanner scan = new Scanner(System.in);
Scanner input = new Scanner(System.in);
int m = input.nextInt();
System.out.println("请输入第一个运算数");
int x = input.nextInt();
System.out.println("请输入第二个运算数");
int y = input.nextInt();
eryuan er;
switch(m) {
case 1:{
er = new add(x,y);
System.out.printf("%d + %d = %d\n", er.getNum1(),er.getNum2(),
er.eryuan());
break;
}
case 2:{
er = new Sub(x,y);
System.out.printf("%d - %d = %d\n", er.getNum1(),er.getNum2(),
er.eryuan());
break;
}
case 3:{
er = new Mul(x,y);
System.out.printf("%d * %d = %d\n", er.getNum1(),er.getNum2(),
er.eryuan());
break;
}
case 4:{
er = new Div(x,y);
System.out.printf("%d / %d = %d\n", er.getNum1(),er.getNum2(),
er.eryuan());
break;
}
case 5:{
er = new quyu(x,y);
System.out.printf("%d 取余 %d = %d\n", er.getNum1(),er.getNum2(),
er.eryuan());
break;
}
case 6:{
er = new Gongyu(x,y);
System.out.printf("%d %d 的最大公约数= %d\n", er.getNum1(),er.getNum2(),
er.eryuan());
break;
}
case 7:{
er = new Gongbei(x,y);
System.out.printf("%d %d 的最小公倍数= %d\n", er.getNum1(),er.getNum2(),
er.eryuan());
break;
}
}
System.out.print("是否继续下一组?");
System.out.println("是,请输入(Y);否,请输入(N)\n");
w = scan.next();
} while (w.equals("Y"));
}
}
代码运行结果:



&spm=1001.2101.3001.5002&articleId=128190869&d=1&t=3&u=65ce30f22c9148a2a5065a1284899d8f)
541

被折叠的 条评论
为什么被折叠?



