Live2D

java

java—有理数类

问题列表:

1.仿照BigDecimal类以面向对象的方式设计有理数类。
给出你的完整的有理数类的代码.
给出你的测试代码。要在与有理数类不同包的其他类中调用有理数类。
类名、变量名命名需符合Java规范。

2.尝试回答与c语言的有理数代码相比较,为什么你设计的类更加面向对象?

3.尝试从代码复用的角度来描述你设计的有理数类。从几个方面讨论。
(1)别人如何复用你的代码?
(2)别人的代码是否依赖你的有理数类的内部属性?当你的有理数类的属性修改时,是否会影响他人调用你有理数类的代码?
(3)有理数类的public方法是否设置合适?为什么有的方法设置为private?
(4)你的类里面有static属性或方法吗?如果有,为什么要设置为static的?

一、有理数类设计代码:

package com.company;

public class Rational {
    private int numerator; // 分子

    private int denominator; // 分母

    public Rational(int n, int d) {
        this.numerator = n;

        this.denominator = d;

    } // 构造函数

    public int getNumerator() {
        return numerator;

    } // 获取分子

    public int getDenominator() {
        return denominator;

    } // 获取分母

四则运算

    public Rational add(Rational secondRational) {
        int n = numerator * secondRational.getDenominator() + denominator * secondRational.getNumerator();

        int d = denominator * secondRational.getDenominator();

        return new Rational(n, d);

    } // 加法

    public Rational subtract(Rational secondRational) {
        int n = numerator * secondRational.getDenominator() - denominator * secondRational.getNumerator();

        int d = denominator * secondRational.getDenominator();

        return new Rational(n, d);

    } // 减法

    public Rational multiply(Rational secondRational) {
        int n = numerator * secondRational.getNumerator();

        int d = denominator * secondRational.getDenominator();

        return new Rational(n, d);

    } // 乘法

    public Rational divide(Rational secondRational) {
        int n = numerator * secondRational.denominator;

        int d = denominator * secondRational.numerator;

        return new Rational(n, d);

    } // 除法

比较大小

    public int compare(Rational r2) {
        long n = this.numerator * r2.denominator - this.denominator * r2.numerator;

        if (n > 0)

            System.out.println("r1>r2");

        else if (n < 0)

            System.out.println("r1<r2");

        else

            System.out.println("r1==r2");

        return 0;

    } // 比较大小

返回字符串

    public String toString() {
        if (denominator == 1)

            return numerator + "";

        else

            return numerator + "/" + denominator;

    } // 返回字符串

有理数类型转化为其他类型

    public int intValue() {
        return (int) doubleValue1();

    } // 将Rational转为int型

    public long longValue() {
        return (long) doubleValue1();

    } // 将Rational转为long型

    public float floatValue() {
        return (float) doubleValue1();

    } // 将Rational转为float型

    public double doubleValue1() {
        return numerator * 1.0 / denominator;

    } // 将Rational转为double型
}

二、不同包下调用有理数类代码:

package test;
import com.company.*;

    public class Main {
        public static void main(String[] args) {
            Rational test1 = new Rational(-1, 5);

            Rational test2 = new Rational(4, 7);

            System.out.println("test1 + test2 = " + test1.add(test2));

            System.out.println("test1 - test2 = " + test1.subtract(test2));

            System.out.println("test1 * test2 = " + test1.multiply(test2));

            System.out.println("test1 / test2 = " + test1.divide(test2));

            System.out.println("将test1转为int型:" + test1.intValue());

            System.out.println("将test1转为long型:" + test1.longValue());

            System.out.println("将test2转为float型:" + test2.floatValue());

            System.out.println("将test2转为double型:" + test2.doubleValue1());

            System.out.println("将test2转为toString型:" + test2.toString());

            test1.compare(test2);

        }
    }

测试截图如下:

三、问题解答:

1.与c语言的有理数代码相比较,为什么你设计的类更加面向对象?

答:因为设计的类的方法和属性是针对它本身特性来考虑的,面向对象;而C语言更多通过函数调用,面向过程。

2.从代码复用的角度来描述你设计的有理数类。从几个方面讨论.

(1)别人如何复用你的代码?

答:java中的包 (package)”机制能够实现代码的复用,故导入包含有编写好的有理数类的包即可。

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

答:别人的代码会依赖于我的有理数类的属性,因为别人在与我的有理数类不同包的其他类中调用了我的有理数类;由于我的有理数类的属性使用private进行了封装,所以当我的有理数类的属性修改时,不会影响他人调用我的有理数代码。

(3)有理数类的public方法是否设置合适?为什么有的方法设置为private?

答:有理数类的public方法设置合理,方便调用,包中的其他类都可以调用。
如有理数的属性设为private,这正是有理数的不能轻易改变的代码部分。比如一些产品属性是不便使用客户修改的这种情况,就需要设置private。同时设为private也更好的保证代码的安全性。

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

答:无。

posted @ 2021-09-27 20:05  AKKL  阅读(102)  评论(1)    收藏  举报