修改RationalNumber类,使其实现Comparable接口。为了实现比较,首先计算两个RationalNumber对象(分子和分母)的浮点数值,然后以0.0001为误差精度进行比较。编写一个main驱动方法,测试你的修改结果。
时间: 2024-02-13 18:05:16 浏览: 26
好的,我理解了你的要求。下面是修改后的RationalNumber类实现Comparable接口的代码:
```java
public class RationalNumber implements Comparable<RationalNumber> {
private int numerator;
private int denominator;
public RationalNumber(int numerator, int denominator) {
if(denominator == 0){
throw new IllegalArgumentException("Denominator cannot be zero!");
}
if(numerator == 0){
this.numerator = 0;
this.denominator = 1;
}
else{
int gcd = gcd(Math.abs(numerator), Math.abs(denominator));
this.numerator = numerator/gcd;
this.denominator = denominator/gcd;
if(this.denominator < 0){
this.numerator = -this.numerator;
this.denominator = -this.denominator;
}
}
}
public RationalNumber add(RationalNumber other) {
int newNumerator = this.numerator * other.denominator + other.numerator * this.denominator;
int newDenominator = this.denominator * other.denominator;
return new RationalNumber(newNumerator, newDenominator);
}
public RationalNumber subtract(RationalNumber other) {
int newNumerator = this.numerator * other.denominator - other.numerator * this.denominator;
int newDenominator = this.denominator * other.denominator;
return new RationalNumber(newNumerator, newDenominator);
}
public RationalNumber multiply(RationalNumber other) {
int newNumerator = this.numerator * other.numerator;
int newDenominator = this.denominator * other.denominator;
return new RationalNumber(newNumerator, newDenominator);
}
public RationalNumber divide(RationalNumber other) {
if(other.numerator == 0){
throw new IllegalArgumentException("Cannot divide by zero!");
}
int newNumerator = this.numerator * other.denominator;
int newDenominator = this.denominator * other.numerator;
return new RationalNumber(newNumerator, newDenominator);
}
private int gcd(int a, int b) {
if(b == 0){
return a;
}
return gcd(b, a % b);
}
public String toString() {
if(this.denominator == 1){
return Integer.toString(this.numerator);
}
return this.numerator + "/" + this.denominator;
}
public double toDouble() {
return (double) this.numerator / this.denominator;
}
@Override
public int compareTo(RationalNumber other) {
double diff = this.toDouble() - other.toDouble();
if(Math.abs(diff) < 0.0001){
return 0;
}
else if(diff > 0){
return 1;
}
else{
return -1;
}
}
}
```
我们对RationalNumber类进行了修改,实现了Comparable接口,并且重写了compareTo方法。在compareTo方法中,我们首先计算了当前对象和传入的对象的浮点数值之差,然后以0.0001为误差精度进行比较。
下面是测试代码:
```java
public class Test {
public static void main(String[] args) {
RationalNumber r1 = new RationalNumber(1, 2);
RationalNumber r2 = new RationalNumber(2, 3);
RationalNumber r3 = new RationalNumber(3, 4);
System.out.println(r1.compareTo(r2)); // -1
System.out.println(r2.compareTo(r1)); // 1
System.out.println(r2.compareTo(r3)); // -1
System.out.println(r3.compareTo(r2)); // 1
System.out.println(r1.compareTo(r1)); // 0
}
}
```
我们创建了三个RationalNumber对象,并比较了它们之间的大小关系。运行结果符合预期,说明我们的修改是正确的。
相关推荐
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)