日期:2014-05-20  浏览次数:20643 次

java基础小问题
我有个需求 想输出"1/8";
Java code
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Fraction f1=new Fraction(1,4);    
        Fraction f2=new Fraction(1,2);
        f1.multiplyy(f2);
        System.out.println(f1);

    }

帮我实现下 这个类Fraction;
谢谢了。。。坐等答案啊

------解决方案--------------------
探讨
我有个需求 想输出"1/8";
Java code
public static void main(String[] args) {
// TODO Auto-generated method stub
Fraction f1=new Fraction(1,4);
Fraction f2=new Fraction(1,2);
……

------解决方案--------------------
你不是要打印1/8吗
Fraction f1=Fraction.getFraction(1, 4);
Fraction f2=Fraction.getFraction(1, 2);
Fraction math=f1.multiplyBy(f2);
System.out.println(math);

------解决方案--------------------
自己写了一个.
Java code
package csdn.calculate;

public class TestFraction
{
     public static void main(String[] args)
           {
        // TODO Auto-generated method stub
            Fraction f1=new Fraction(14,21);    
            Fraction f2=new Fraction(20,-30);
            Fraction f3;
        f3=f1.plus(f2);
            System.out.println(f1+"+ "+f2+"= "+f3);
        f3=f1.minus(f2);
            System.out.println(f1+"- "+f2+"= "+f3);
        f3=f1.multiply(f2);
            System.out.println(f1+"* "+f2+"= "+f3);
        f3=f1.divide(f2);
            System.out.println(f1+"/ "+f2+"= "+f3);
        }
}
class Fraction
{
    private int c;
    private int d;

    public Fraction()                    //默认构造函数,分子分母都为1。
    {
        c=1;
        d=1;
    }
    public Fraction(int a,int b)                //带参数构造函数,判断分母是否为0。
    {
        if(b==0)
        {
            System.out.println("分母 不能为0!");
            System.exit(0);
        }
        c=a;
        d=b;
        selfTrim();
    }

    public int getNumerator()
    {
        return c;
    }
    public int getDinominator()
    {
        return d;
    }

    public void selfTrim()
    {
        int maxCommon=commonDivisor(c,d);        //求出两个数的最大公约数。
        c=c/maxCommon;                    //分式为最简。
        d=d/maxCommon;
        //整理正负号。
        if((c>0&&d<0)||(c<0&&d<0))
        {
            c=-c;
            d=-d;
        }
    }



    public String toString()                        //重写tostring().
    {
        if(c==0||d==1)                            //分母为1 直接输出分子.
        {
            return Integer.toString(c);
        }
        return Integer.toString(c)+"/"+Integer.toString(d);        //输出c/d.
    }
    //----- plus
    public Fraction minus(Fraction f2)
    {
        int newNumerator=c*f2.getDinominator()-d*f2.getNumerator();
        int newDinominator=d*f2.getDinominator();

        int maxCommon=commonDivisor(newNumerator,newDinominator);
        return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);
    }
    //---- minus
    public Fraction plus(Fraction f2)
    {
        int newNumerator=c*f2.getDinominator()+d*f2.getNumerator();
        int newDinominator=d*f2.getDinominator();

        int maxCommon=commonDivisor(newNumerator,newDinominator);
        return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);
    }
    //----- mutiply
    public  Fraction multiply(Fraction f2)                    //两个分数相乘。
    {
        int newNumerator=c*f2.getNumerator();
        int newDinominator=d*f2.getDinominator();

        int maxCommon=commonDivisor(newNumerator,newDinominator);
        return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);
    }
    
    //-----  divide
    public Fraction divide(Fraction f2)
    {
        if(f2.getNumerator()==0)
        {
            System.out.println("0不能做除数!");
            System.exit(0);
        }
        Fraction result=new Fraction();
        int newNumerator=c*f2.getDinominator();
        int newDinominator=d*f2.getNumerator();

        int maxCommon=commonDivisor(newNumerator,newDinominator);
        return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);
    }

    //计算2个数的最大公约数。按绝对值计算。
    public static  int commonDivisor(int x,int y)        //计算2个数的最大公约数。按绝对值计算。
    {
        if(x==0||y==0)
        {
            return 1;
        }
        int x1;                
        int y1;

        x1=(Math.abs(x)>Math.abs(y))?Math.abs(x):Math.abs(y);                //使x1>y1.
        y1=(Math.abs(x)>Math.abs(y))?Math.abs(y):Math.abs(x);
        int z=1;
            while(z!=0) 
            {
            z=x1%y1;
                 x1=y1;
                 y1=z;
             } 
        return x1;
    }
}