尝试实现 Comparable 并重写compareTo,但在测试时得到奇怪的结果

问题描述 投票:0回答:1

我想实现Comparable接口并重写compareTo。所有这些似乎都工作正常,但我对我的测试结果感到非常困惑。如果我尝试使用 2 个有理数调用compareTo,我会收到“未找到符号”错误。我已经查过了,有人建议将有理数转换为字符串。当我这样做时,fsr似乎我什至没有调用我自己的函数(我更改了函数内的参数,这没有任何改变),相反,程序总是返回2。如果我与等于它比较,它工作得很好。

这是我的代码,如果需要我可以添加包。

`package app.exercise.testing;
import app.exercise.algebra.*;
import java.lang.Comparable;

public class compRational extends Rational implements Comparable<Rational>{


   public int compareTo(Rational y){
        System.out.println("Troubleshoot: "+(int)this.getN()*(int)y.getD()+ " "+(int)y.getN()*(int)this.getD());
        return Integer.compare((int)this.getN()*(int)y.getD(),(int)y.getN()*(int)this.getD());

    }
    //Testing

    public static void main(String args[]){
        Rational test=new Rational(3,8);
        Rational test2=new Rational(10,3);
        Rational test3=new Rational(3,8);
        // Compare

        System.out.println("Compare Test: "+test.compareTo(test2));
        if((test.toString().compareTo(test3.toString())==0) == test.equals(test3)){
            System.out.println("compare test 2: "+true);
        }


    }
}`

由于可比较函数的第一行从未工作过(“故障排除”打印),我假设使用两个字符串调用compareTo不会调用我自己的compareTo,这让我很困惑我什至会如何调用我自己的函数

java package comparable compareto
1个回答
0
投票

好的。在我看来,你需要:

  • 实施
    Comparable<CompRational>
  • 包含一个新的构造函数来使用参数填充实例化类。
public CompRational(int num, int den) {
    super(num,den);
}
  • 然后创建实例。
CompRational test = new CompRational(3, 8);
CompRational test2 = new CompRational(10, 3);
CompRational test3 = new CompRational(3, 8);
© www.soinside.com 2019 - 2024. All rights reserved.