栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

有理数类设计

Java 更新时间:发布时间: 百科书网 趣学号

仿照BigDecimal类以面向对象的方式设计有理数类。

给出你的完整的有理数类的代码
package rational;

public class Rational {
    
    private int Numerator;//分子
    private int Denominator;//分母
    
    public Rational(int Numerator, int Denominator) {    //构造函数
        this.Numerator=Numerator;
        this.Denominator=Denominator;
    }

    public int getNumerator() {    //获取分子
        return Numerator;
    }

    public void setNumerator(int numerator) {
        Numerator = numerator;
    }

    public int getDenominator() {    //获取分母
        return Denominator;
    }

    public void setDenominator(int denominator) {
        Denominator = denominator;
    }
    
    public    Rational addition(Rational X) {    //加法
        int a=this.Numerator*X.Denominator+X.Numerator*this.Denominator;
        int b=this.Denominator*X.Denominator;
        return new Rational(a,b);
    }
    
    public    Rational subtraction(Rational X) {    //减法
        int a=this.Numerator*X.Denominator-X.Numerator*this.Denominator;
        int b=this.Denominator*X.Denominator;
        return new Rational(a,b);
    }
    
    public    Rational multiplication(Rational X) {    //乘法
        int a=this.Numerator*X.Numerator;
        int b=this.Denominator*X.Denominator;
        return new Rational(a,b);
    }
    
    public    Rational division(Rational X) {    //除法
        int a=this.Numerator*X.Denominator;
        int b=this.Denominator*X.Numerator;
        return new Rational(a,b);
    }
    
    public int compareTo(Rational X) {    //比较大小
        if(this.subtraction(X).getNumerator()>0)
            return 1;//大于
        else if(this.subtraction( X).getNumerator()==0)
            return 0;//等于
        else
            return -1;//小于
    }
    
    public String toString() {    //转换成String型,输出Rational类默认转换为该型
        if(this.Denominator==1)
            return this.Numerator+" ";
        else
            return this.Numerator+"/"+this.Denominator;
    }
    
    public double doublevalue() {    //转换成double型
        return 1.0*this.Numerator/this.Denominator;
    }
    
    public int intValue() {    //转换成int型
        return (int)doublevalue();
    }
    
    public long longValue() {    //转换成long型
        return (long)doublevalue();
    }
    
}
给出你的测试代码,要在与有理数类不同包的其他类中调用有理数类( 类名、变量名命名需符合Java规范)
import java.util.Scanner;

import rational.Rational;

public class Test {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("输入两个数字构成有理数分数");
        Rational a = new Rational(in.nextInt(), in.nextInt());
        System.out.println("输入两个数字构成有理数分数");
        Rational b = new Rational(in.nextInt(), in.nextInt());
        System.out.println("两个有理数相加结果");
        System.out.println(a.addition(b));
        System.out.println("两个有理数相减结果");
        System.out.println(a.subtraction(b));
        System.out.println("两个有理数相乘结果");
        System.out.println(a.multiplication(b));
        System.out.println("两个有理数相除结果");
        System.out.println(a.division(b));
        System.out.println("比较两个有理数大小结果:大于输出1,等于输出0,小于输出-1");
        System.out.println(a.compareTo(b));
        System.out.println("将第一个有理数转换成字符串型");
        System.out.println(a.toString());
        System.out.println("将第一个有理数转换成double型");
        System.out.println(a.doublevalue());
        System.out.println("将第一个有理数转换成int型");
        System.out.println(a.intValue());
        System.out.println("将第一个有理数转换成long型");
        System.out.println(a.longValue());
    }

}
测试结果
输入:
输入两个数字构成有理数分数
1 3
输入两个数字构成有理数分数
1 4
 
输出结果:
两个有理数相加结果
7/12
两个有理数相减结果
1/12
两个有理数相乘结果
1/12
两个有理数相除结果
4/3
比较两个有理数大小结果:大于输出1,等于输出0,小于输出-1
1
将第一个有理数转换成字符串型
1/3
将第一个有理数转换成double型
0.3333333333333333
将第一个有理数转换成int型
0
将第一个有理数转换成long型
0
Q&A Q1:尝试回答与c语言的有理数代码相比较,为什么你设计的类更加面向对象?

A1: c语言是面向过程的,而java是面向对象。c语言倾向以函数解决问题。而java倾向与用类解决问题,设计的类有属性和方法,封装了很多类和接口,类将功能以方法形式写出,而在使用时将类导入即可,更加方便。

Q2:别人如何复用你的代码?

A2:下载包到本地,导入包到IDE中,通过“类名.方法”调用函数。使用setter/getter设置和访问private。

Q3:别人的代码是否依赖你的有理数类的内部属性?当你的有理数类的属性修改时,是否会影响他人调用你有理数类的代码?

A3:调用时的代码对该类的属性有依赖性。当有理数类修改时,会影响调用。

Q4:有理数类的public方法是否设置合适?为什么有的方法设置为private?

A4: 合适。有的方法设置成private时,只有类的内部才能访问到,外部没法访问,可以保护数据。而设置成public的方法,可以被任意类访问,被调用时方便。

Q5:你的类里面有static属性或方法吗?如果有,为什么要设置为static的?

A5:有,main方法。main方法必须要static来修饰,是因为main方法是Java解释器调用的,那时候还没有任何对象产生。

简单说明你的设计的有理数类是否是不可变类?如果想要设计成不可变类,主要从哪几个方面着手?

1.不是。因为类的实例创建后,可以修改其内容。
2.
①使类中所有的成员变量被final修饰。
②类中没有修改成员变量的方法,例如setXXX,可以提供一个带参的构造函数来初始化这些成员变量。
③确保类中的方法不会被重写.可以将类或者类中的方法定义为final的来实现。
④如果一个类的成员不是不可变量,那么在成员初始化或者使用get方法获取该成员变量时,需要使用clone方法来确保类的不可变性。

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/270224.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号