有理数类的设计

1.给出你的有理数类的代码。

package test1;

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();
}

}


2.给出你的测试代码。要在与有理数类不同包的其他类中调用有理数类。

package test1;

import java.util.ArrayList;
import java.util.Scanner;
import java.util.Arrays;
import java.util.List;
import java.math.BigDecimal;
import test1.Rational;

public class Main {
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("两个有理数相减结果");
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());
}

}


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

c语言代码是依据于函数的，主要是通过过程来实现，类将功能以方法形式写出，而在使用时将类导入即可，更加方便

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

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

posted @ 2021-09-27 19:15  51456  阅读(41)  评论(0编辑  收藏  举报