设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。

【问题描述】
设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。
这个类的构造方法是:Fraction(int a, int b)构造一个a/b的分数,需要对分数约分,如 6/8需转换为 3/4。
这个类要提供以下的功能:
1、将分数转换为double double toDouble();
2、将自己的分数和另一个分数相加,产生一个新的Fraction的对象 public Fraction add(Fraction other)
3、将自己的分数和另一个分数相乘,产生一个新的Fraction的对象 public Fraction multiply(Fraction other)
4、重写toString 方法,将分数自己以“分子/分母”的形式返回。如果分数是1/1,4/2应该输出1,2。当分子大于分母时,不需要提出整数部分,即31/30是一个正确的返回。

【输入形式】
分别输入两个分数的分子和分母,中间以空格分隔。

【输出形式】
测试程序自己输出。

【样例输入输出①】
first number,fenzi fenmu
3 6
second number,fenzi fenmu
5 15
first Fraction:1/2
first output as double:0.50
second Fraction:1/3
second output as double:0.33
result of two Fraction add:5/6
result of two Fraction multiply:1/6


import  java.util.Scanner;

class  Fraction  {
	int zi,mu;
	Fraction(int zi,int mu){
		this.zi=zi;
		this.mu=mu;
	}
	double toDouble() {
		return (double)zi/mu;
	}
	Fraction add(Fraction  r) {
		Fraction s = new Fraction(1,0);
		s.zi=r.zi*mu+r.mu*zi;
		s.mu=r.mu*mu;
		return s;
		
	}
	Fraction multiply(Fraction r) {
		Fraction s = new Fraction(0,1);
		s.zi=r.zi*zi;
		s.mu=r.mu*mu;
		return s;
	}
	public String toString() {
	/*
  这里采用“辗转相除法”求两个整数的最大公因数。
  辗转相除法:较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,(***注意是除不是除以***)
  如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
*/
		int r=1,x=zi,y=mu;
		if(x>y) {
			int t;
			t=x;
			x=y;
			y=t;
		}
		while(r!=0) {
			r=y%x;
			y=x;
			x=r;
			
		}
		zi = zi/y;
		mu=mu/y;
		if(zi==mu) {
			return "1";
		}
		else {
			return zi+"/"+mu;
		}
	
	

}
}

public  class  TestFraction  {
        public  static  void  main(String[]  args)  {
                Scanner  sc  =  new  Scanner(System.in);
                int  fz,  fm;
                System.out.println("first  number,fenzi  fenmu");
                fz  =  sc.nextInt();
                fm  =  sc.nextInt();
                Fraction  f1  =  new  Fraction(fz,  fm);
                System.out.println("second  number,fenzi  fenmu");
                fz  =  sc.nextInt();
                fm  =  sc.nextInt();
                Fraction  f2  =  new  Fraction(fz,  fm);
                System.out.println("first  Fraction:"  +  f1);
                System.out.printf("first  output  as  double:%.2f\n",  f1.toDouble());
                System.out.println("second  Fraction:"  +  f2);
                System.out.printf("second  output  as  double:%.2f\n",  f2.toDouble());
                System.out.println("result  of  two  Fraction  add:"  +  f1.add(f2));
                System.out.println("result  of  two  Fraction  multiply:"  +  f1.multiply(f2));
                sc.close();
        }
} 
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值