一个关于求a 和b的最大公约数与最小公倍数;
问题:假如输入 3和7,为何不能求出最小公倍数???package package1;import java.util.Scanner;
class 最大公约数{
public int f(int a,int b){
if(a<b){
int m;
m=a;
a=b;
b=m;
}
if(a%b==0) return b;
else return f(b,a%b);
}
}public class 最小公倍数 extends 最大公约数{
public int f(int a,int b){
int m;
m=super.f(a,b);
System.out.println(m);
return ((a*b)/m);
}
public static void main(String[] args) {
最大公约数 gcd=new 最大公约数();
最小公倍数 gcd1=new 最小公倍数();
Scanner sc1=new Scanner(System.in);
Scanner sc2=new Scanner(System.in);
System.out.println("请输入两个正整数:");
int a=sc1.nextInt();
int b=sc2.nextInt();
int m=gcd.f(a, b);
System.out.println(a+"和"+b+"的最大公约数为:"+m);
int n=gcd1.f(a, b);
System.out.println(a+"和"+b+"的最小公倍数为:"+n);
}}
假如输入 3和7,为何不能求出最小公倍数???
问题:假如输入 3和7,为何不能求出最小公倍数???package package1;import java.util.Scanner;
class 最大公约数{
public int f(int a,int b){
if(a<b){
int m;
m=a;
a=b;
b=m;
}
if(a%b==0) return b;
else return f(b,a%b);
}
}public class 最小公倍数 extends 最大公约数{
public int f(int a,int b){
int m;
m=super.f(a,b);
System.out.println(m);
return ((a*b)/m);
}
public static void main(String[] args) {
最大公约数 gcd=new 最大公约数();
最小公倍数 gcd1=new 最小公倍数();
Scanner sc1=new Scanner(System.in);
Scanner sc2=new Scanner(System.in);
System.out.println("请输入两个正整数:");
int a=sc1.nextInt();
int b=sc2.nextInt();
int m=gcd.f(a, b);
System.out.println(a+"和"+b+"的最大公约数为:"+m);
int n=gcd1.f(a, b);
System.out.println(a+"和"+b+"的最小公倍数为:"+n);
}}
假如输入 3和7,为何不能求出最小公倍数???
况且,你这个叫重写,不叫重载。
问题就出在“ return f(b,a%b);”这句话上,你此时调用的已经是子类的方法,父类会通过值传递的方式去传递给子类的方法,所以肯定会出现逻辑上的错误。
在平时的项目当中,也要遵从“多聚合,少继承“的原则,项目中继承的大多是Java的库类,很少用到咱平时练的那些”纠结的继承程序“。这种纠结的程序果断pass掉,把学习的重点放在集合、IO、多线程上面。
原题目是这样的:
写一个类,该类有一个方法public int f(int a,int b),该方法返回a和b的最大公约数。然后在编写一个子类,要求子类重写这个f方法,而且重写的方法将返回a和b的最小公倍数。要求在重写的方法的方法体中首先调用被隐藏的方法返回a和b的最大公约数m,然后再将乘积(a*b)/m返回。要求在应用程序的主类中分别使用父类和子类创建对象,并且调用方法f计算两个正数的最大公约数与最小公倍数.