A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhoujiegun 中级黑马   /  2016-5-5 23:39  /  403 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*需求:定义一个类,Fraction,该类存储一个分数,类中有两个成员变量,分子和分母
*          1)定义一个方法,接收一个Fraction r类,方法内把r的分数与本类的分数相加后生成一个新的Fraction类
*          2)定义一个方法,接收一个Fraction r类,方法内把r的分数与本类的分数相乘后生成一个新的Fraction类
*          3)测试类中创建两个Fraction对象,分别使用定义的两个方法生成新的分数,然后打印出来.*/
public class FractionTest {
        public static void main(String[] args) {
                // 创建两个对象
                Fraction f1 = new Fraction(2, 3);
                Fraction f2 = new Fraction(1, 4);
                // 分数相乘
                Fraction f3 = f1.multiply(f2);
                // 分数相加
                Fraction f4 = f1.plus(f2);

                Fraction f5 = Fraction.huaJian(f3);

                Fraction f6 = Fraction.huaJian(f4);

                System.out.println(f5); // 相乘
                System.out.println(f6); // 相加
        }
}

class Fraction {
        private int fz; // 分子
        private int fm; // 分母

        /**
         * 无参构造
         */
        public Fraction() {
                super();
        }

        /*
         * 带参构造
         */
        public Fraction(int fz, int fm) {
                super();
                this.fz = fz;
                this.fm = fm;
        }

        /*
         * 分子get访问器
         */
        public int getFz() {
                return fz;
        }

        /*
         * 分子set访问器
         */
        public void setFz(int fz) {
                this.fz = fz;
        }

        /*
         * 分母get访问器
         */
        public int getFm() {
                return fm;
        }

        /*
         * 分母set访问器
         */
        public void setFm(int fm) {
                this.fm = fm;
        }

        /**
         * 计算分数相加
         *
         * @param r
         *            传递 分数对象
         * @return 返回一个分数
         */
        public Fraction plus(Fraction r) {
                // 计算出没简化前的分子分母
                int newFz = this.fz * r.fm + r.fz * this.fm;
                int newFm = this.fm * r.fm;
                return new Fraction(newFz, newFm);
        }

        /**
         * 计算分数相乘
         *
         * @param r
         *            传递 分数对象
         * @return 返回一个分数
         */
        public Fraction multiply(Fraction r) {
                int newFz = this.fz * r.fz;
                int newFm = this.fm * r.fm;
                return new Fraction(newFz, newFm);
        }

        /**
         * 求最大公约数
         *
         * @param a
         *            传递过来的分子
         * @param b
         *            传递过来的分母
         * @return 递归
         */
        public static int getGys(int a, int b) {
                // 如果a%b==0,则b是最大公约数
                int mod = a % b;
                if (mod == 0) {
                        return b;
                } else {
                        return getGys(b, mod);
                }
        }

        /**
         * 分子 分母分别除以最大公约数 得到化简后的 分子分母值
         *
         * @param r
         * @return
         */
        public static Fraction huaJian(Fraction r) {
                int newFz = r.fz / getGys(r.fz, r.fm);
                int newFm = r.fm / getGys(r.fz, r.fm);
                return new Fraction(newFz, newFm);
        }

        // 将分子分母同时用分数符号做字符串拼接得到最后的结果
        @Override
        public String toString() {
                return "Fraction:" + fz + "/" + fm;
        }

}

1 个回复

倒序浏览
不明觉厉!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马