用Java实现两个具体分数的相加?这代码有逻辑错误,求解答!

韬博 2014-09-07 12:02:36
//分数类
public class FenShu {
private static int fenMu,fenZi;
public FenShu(int m,int n) {
fenZi=m;
fenMu=n;

}
public void addFenShu(int x,int y ){
fenZi=fenZi*y+fenMu*x;
fenMu=fenMu*y;
}
public int getFenZi(){
return fenZi;
}
public int getFenMu(){
return fenMu;
}
public int getGongYueShu(){
if(Math.abs(fenZi)<Math.abs(fenMu))
{
int t=fenZi;
fenZi=fenMu;
fenMu=t;


}
while(fenZi%fenMu!=0)
{
int yuShu=fenZi%fenMu;
fenZi=fenMu;
fenMu=yuShu;
}
return fenMu;
}

}



//主类

public class AppMain {


public static void main(String[] args) {
FenShu fenshu1=new FenShu(3,12);
fenshu1.addFenShu(4, 24);
int gongYueShu=fenshu1.getGongYueShu();
System.out.println("最大公约数为:"+gongYueShu);
int totalFenZi=fenshu1.getFenZi()/gongYueShu;
System.out.println(fenshu1.getFenZi());
int totalFenMu=fenshu1.getFenMu()/gongYueShu;
System.out.println(fenshu1.getFenMu());
System.out.println("3/12 + 4/24="+totalFenZi+"/"+totalFenMu);

}


}

最后运行的结果为:
最大公约数为:24
48
24
3/12 + 4/24=2/1


//很明显错误,求解答工程!谢谢
[size=24px][/size]
...全文
303 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gere Yeung 2016-08-03
  • 打赏
  • 举报
回复
apache commos math, 有complex类
ydarin 2014-09-07
  • 打赏
  • 举报
回复
public static int gongYueShu(int x,int y){ if(x<y) return gongYueShu(x,y-x); else if(x==y) return x; else return gongYueShu(y,x); } 楼主可以用这个算法求x和y的公约数,x和y都是正整数。楼主可能是想用这个思路,要用到递归算法,试试看。
??435 2014-09-07
  • 打赏
  • 举报
回复
你的getGongYueShu()方法中逻辑有问题,把已经获得的fenZi和fenMu 的值又该成其他值了,所以后面得到的totalFenZi和 totalFenMu得到的不是你想要的结果,以下是我写的getGongYueShu()方法 public int getGongYueShu() { //求最大公约数 //获得分子分母中较小的一个 int min=fenZi>fenMu?fenMu:fenZi; for(int i=min;i>=1;i--){ //如果i能将fenZi和fenMu除尽,则返回i,i既是最大公约数 if(fenZi%i==0&&fenMu%i==0){ return i; } } return 1; }

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧