JAVA分数类的实现

By | 04月17日
Advertisement

题目:
1、写一个分数类,实现分数的加、减、乘、除;
2、对下面分数从小到大排序:1/2 , 2/3 , 48/62 , 70/20, 9/25

我的解法如下,大家一起讨论讨论:

package com.gzitc.exam;
/**
 * 求最大公约数,最小公倍数
 * @author e606#qq.com
 *
 */
public class MathUtil {
    /**
     * 两个数求最大公约数,可以用辗转相除法。
     * 始终用较大数除以较小数,然后用余数代替较大数。整除时的除数就是最大公约数。
     * @param a
     * @param b
     * @return
     */
    public static long gY(long a, long b) {

        long r = 1;

        if(a < b) {
            long t = a;
            a = b;
            b = t;
        }

        r = a % b;

        while( r != 0) {
            long t = r;
            r = b % r;
            b = t;
        }

        return b;
    }
    /**
     * 求公倍数
     * @param a
     * @param b
     * @return
     */
    public static long gB(long a, long b) {
        long gb = 0;
        gb = a * b / gY(a, b);
        return gb;
    }
}
package com.gzitc.exam;

/**
 * 分数实体类
 * @author e606#qq.com
 *
 */
public class Fraction {
    /**
     * 分子
     */
    private long sun;
    /**
     * 分母
     */
    private long mum;
    /**
     * 实例化一个分数实例
     * @param sun
     * @param mum
     */
    public Fraction(long sun, long mum) {
        this.sun = sun;
        this.mum = mum;
    }

    public long getSun() {
        return sun;
    }

    public void setSun(long sun) {
        this.sun = sun;
    }

    public long getMum() {
        return mum;
    }

    public void setMum(long mum) {
        this.mum = mum;
    }

    @Override
    public String toString() {
        return sun + "/" + mum;
    }
    /**
     * 判断分数是否大于0
     * @return
     */
    public int isUpZero() {
        if(sun * mum > 0) {
            return 1;
        } else {
            return -1;
        }
    }
}
package com.gzitc.exam;

public class FractionUtil {
    /**
     * 加法运算
     * @param fraction1
     * @param fraction2
     * @return
     */
    public static Fraction plus(Fraction a,Fraction b) {
        long r_mum = MathUtil.gB(a.getMum(), b.getMum());
        long r_sun = a.getSun() * r_mum / a.getMum() + b.getSun() * r_mum / b.getMum();
        return new Fraction(r_sun, r_mum);
    }
    /**
     * 减法运算
     * @param a
     * @param b
     * @return
     */
    public static Fraction minus(Fraction a,Fraction b) {
        long r_mum = MathUtil.gB(a.getMum(), b.getMum());
        long r_sun = a.getSun() * r_mum / a.getMum() - b.getSun() * r_mum / b.getMum();
        return new Fraction(r_sun, r_mum);
    }
    /**
     * 乘法运算
     * @param a
     * @param b
     * @return
     */
    public static Fraction multiplied(Fraction a,Fraction b) {
        long r_sun = a.getSun() * b.getSun();
        long r_mum = a.getMum() * b.getMum();
        Fraction r_fraction = new Fraction(r_sun, r_mum);
        return r_fraction;
    }
    /**
     * 除法运算
     * @param a
     * @param b
     * @return
     */
    public static Fraction divided(Fraction a,Fraction b) {
        long r_sun = a.getSun() * b.getMum();
        long r_mum = a.getMum() * b.getSun();
        Fraction r_fraction = new Fraction(r_sun, r_mum);
        return r_fraction;
    }

    /**
     * 对分数数组从小到大进行排序
     * @param arr
     * @return
     */
    public static void sort(Fraction arr[]) {
        int length = arr.length;
        //冒泡排序
        for(int i = 0; i < length-1; i++) {
            for(int j = i; j < length; j++) {
                //判断减运算得到新的分数是否大于0,如果大于0,说明arr[i]大于arr[j],调换位置。
                if(FractionUtil.minus(arr[i], arr[j]).isUpZero() > 0) {
                    Fraction temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }

}
package com.gzitc.exam;

public class Test {
    public static void main(String args[]) {
        Fraction a,b;
        a = new Fraction(5,7);
        b = new Fraction(3,7);
        Fraction arr[] = {new Fraction(1,2), new Fraction(2,3), new Fraction(48,62),
                new Fraction(70,20), new Fraction(9,25)};

        System.out.println(a+"+"+b+"="+FractionUtil.plus(a, b));
        System.out.println(a+"-"+b+"="+FractionUtil.minus(a, b));
        System.out.println(a+"*"+b+"="+FractionUtil.multiplied(a, b));
        System.out.println("("+a+")/("+b+")="+FractionUtil.divided(a, b));

        System.out.print("数组:");
        for(int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"  ");
        }
        System.out.print(",从小到大的排序结果为:");
        //调用排序的方法
        FractionUtil.sort(arr);

        for(int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" , ");
        }
    }
}

Similar Posts:

  • Java分数运算

    //测试类 //∷相关函数:compareTo函数 public class Exec2 { public static void main(String[] args) { // 创建两个分数类变量 Fraction fraction1 = new Fraction(0.25); Fraction fraction2 = new Fraction(2, 8); // 分数相加 Fraction fraction3 = fraction1.add(fraction2); System.out.p

  • Java:类与继承

    Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知识.首先,我们讲述一下与类的初始化相关的东西,然后再从几个方面阐述继承这一大特性.以下是本文的目录大纲: 一.你了解类吗? 二.你了解继承吗? 三.常见的面试笔试题 若有不正之处,请多多谅解并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/do

  • 实验11:Problem A: 分数类的输出

    注意如果是负数,要把负号放在分子上 Home Web Board ProblemSet Standing Status Statistics Problem A: 分数类的输出 Problem A: 分数类的输出 Time Limit: 3 Sec Memory Limit: 128 MB Submit: 1453 Solved: 574 [Submit][Status][Web Board] Description 封装一个分数类Fract,用来处理分数功能和运算,支持以下操作: 1. 构造:

  • 利用在线工具根据JSon数据自动生成对应的Java实体类

    如果你希望根据JSon数据自动生成对应的Java实体类,并且希望能进行变量的重命名,那么"JSON To Java"一定适合你.(下面的地址需要FQ) https://jsontojava.appspot.com/ 简单快速有效,适合追求效率的你.

  • Java记录 -52- 整体看Java Collection类集

    java.util包中包含了一些在java 2中新增加的最令人兴奋的增强功能:类集. 除了类集,java.util 还包含了支持范围广泛的函数的各种各样的类和接口.对它们的应用包括产生伪随机码数,对日期和时间的操作,观测事件,对位集的操作以及标记字符串. 由于java.util具有许多特性,因此它是Java中最被广泛使用的一个包. 下面详细介绍下类集: 一个类集(collection)是一组对象.Java的类集(collection)框架使你的程序处理对象组的方法标准化,设计成包含一组标准的接口

  • Java 注释类之常用元注解

    Java 注释类之常用元注解 自定义Java注释类时,我们使用方式如下: @Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)class @interface Author{ publicString name(); publicString company();} 这次我们重点讨论修饰注解的注解,也就是我们说的元注解. @Retention 注解@Retention可以用来修饰注解,是注解的注解,称为元注解. Retent

  • Java线程类小结(附思维导图)

    [文章标题]Java线程类小结(附思维导图) [文章作者]曾健生 [作者邮箱][email protected] [作者QQ]190678908 [作者博客]http://blog.csdn.net/newjueqi [编程环境]JDK 1.6.0_01 [作者声明]欢迎转载文章,但转载请保留文章的完整性以及注明文章的出处. ******************************************************************************* 一

  • Java工具类提供的排序功能

    今天好好地巩固了一下基础,仔细研究了一下,其实Java工具类真的非常丰富,它已经提供了各种排序功能的实现: 1.数组排序 java.util.Arrays类提供了各种对象的排序:char[],byte[],long[],int[]和Object[],注Arrays.sort方法排序返回的结果是升序Ascending的排列顺序.你可以定制排序顺序.这个排序和TreeSet的红黑树排序方式不同,Set不允许有重复数据存在,因此,当有重复数据时,可以使用这个工具类进行排序.Arrays提供的排序算法是

  • 每天简单JAVA教学:类继承,重写、重构及重载,final的用法

    昨天事忙,所以没时间给大家写blog,抱歉一下. 今天说的内容有三个,首先来说java的类继承: 前面已经说过,要继承,只要在定义class的类名后面使用关键字extends,然后再在后面声明当前的类是继承哪个类就好了. package extendsdemo; public class Child extends Father { public Child() { System.out.println("I'm the child"); } public static void ma

  • Java Process类的浅学习

    Java Process类的浅学习 文章分类:Java编程 今天用了下java.lang.Process类,只是初步的学习,并没有深入实践,因为感觉它的用途并不是很大,偶尔才可能用上,如果要经常使用它的人可以自行参考JDk文档. 对Process类的简要说明: Process类是一个抽象类,方法都是抽象的,它封装了一个进程,也就是一个可执行的程序 该类提供进程的输入.执行输出到进程.等待进程的完成和检查进程的退出状态及销毁进程的方法 ProcessBuilder.start()和Runtime.

Tags: