如何修复方法compareTo中的代码,使其不仅返回所有零值?

时间:2019-04-06 11:19:11

标签: java compareto

我的任务是在compareTo块中编写代码,以比较main方法中的三个对象。我可以编译代码,但是在运行时,所有返回值都为零。

对象中的每个参数都是分子和分母。我将每个对象中的这些数字相除,将一个对象相互比较,然后将它们返回为int类型。

public class Ratio implements Comparable {
    protected int numerator;
    protected int denominator;
    public Ratio(int top, int bottom) //precaution: bottom !=0
    {
        numerator = top;
        denominator = bottom;
    }
    public int getNumerator() {
        return numerator;
    }
    public int getDenominator() {
        return denominator;
    }


    public int compareTo(Object other) { //precaution: other is non-null Ratio object
        //my own code
        int a = this.getNumerator() / this.getDenominator();
        int b = ((Ratio) other).getNumerator() / ((Ratio) other).getDenominator();
        int difference = a - b;

        if (difference == 0) {
            return 0;
        } else if (difference > 0) {
            return 1;
        } else {
            return -1;
        }
    }
}

这些是main方法中给出的对象。

Ratio r1 = new Ratio(10,5);
Ratio r2 = new Ratio(7,3);
Ratio r3 = new Ratio(20,10);

我希望输出是

  • r1与r2 = -1比较
  • r1与r3 = 0相比
  • r2与r1 = 1
  • r2与r3 = 1
  • r3与r1 = 0相比
  • r3与r2 = -1比较
  • r3与r3 = 0

但是实际输出返回全零。 请告诉我如何解决。

1 个答案:

答案 0 :(得分:0)

当您除以/时,得到的结果将没有余数。 这就是示例中每个比率等于2且差异全为零的原因。

您需要考虑模数运算符(%),该运算符可以为Ratio实例之间的精确差提供余数。