一个关于求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,为何不能求出最小公倍数???
解决方案 »
- 刚下载了一个java程序,不如如何打开,高手来看看
- Java编写程序
- 如何在treemodel中查找指定的节点
- WIN 2008上怎么配置JAVA
- 我刚刚学JAVA,写了一个不知道算不算游戏的游戏,请高手指点并帮助改进
- 定义final int i = new int[2];之后树组维数无法改变,但内容可变,如何使内容也不可变
- 问一下System.exit(0)与System.exit(1)有什么区别,里面的整数代表什么
- 请给一个用java写的telnet客户端原码,分数不够我再给
- 改变指向---如何在函数中让函数参数指向null
- Java关于求a的N次方的问题
- 动态创建的按钮怎么设置监听?
- Android-----实现主题的切换
况且,你这个叫重写,不叫重载。
问题就出在“ 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计算两个正数的最大公约数与最小公倍数.