繁体   English   中英

如何实现Comparable接口以比较2个对象?

[英]How do I implement the Comparable interface to compare 2 objects?

我试图添加到该程序中,以便可以使用Comparable接口比较两个有理数(稍后将在驱动程序类中定义)。 但是,当我将int设为public intTo时,它不允许我声明多个有理对象。 我怎样才能做到这一点?

public class Rational implements Comparable <Rational, Rational>
{ 
     private int numerator; 
     private int denominator; 

public Rational (int numer, int denom) 
{ // begins block
  if (denom == 0) 
  denom = 1; 

if (denom < 0)
{ 
  numer = numer * -1; 
  denom = denom * -1; 
} 
numerator = numer; 
denominator = denom; 
reduce();
}

public int getNumerator ()
{ 
  return numerator; 
} 
public int getDenominator ()
{ // begins block
return denominator;  
} 
public Rational reciprocal ()  
{ // begins block
return new Rational (denominator, numerator); 
} 
public Rational add (Rational op2) 
{ // begins block
int commonDenominator = denominator * op2.getDenominator();
int numerator1 = numerator * op2.getDenominator();
int numerator2 = op2.getNumerator() * denominator; 
int sum = numerator1 + numerator2; 
return new Rational (sum, commonDenominator); 
} 
public Rational subtract (Rational op2)
{ // begins block
int commonDenominator = denominator * op2.getDenominator(); 
int numerator1 = numerator * op2.getDenominator(); 
int numerator2 = op2.getNumerator() * denominator; 
int difference = numerator1 - numerator2;
return new Rational (difference, commonDenominator); 
} 
public Rational multiply (Rational op2) 
{ // begins block
int numer = numerator * op2.getNumerator(); 
int denom = denominator * op2.getDenominator(); 
return new Rational (numer, denom); 
} 

public Rational divide (Rational op2)
{ // begins block
return multiply (op2.reciprocal()); 
}
public boolean equals (Rational op2) 
{ // begins block
return ( numerator == op2.getNumerator() && denominator ==      op2.getDenominator() ); 
}
public String toString () 
{ // begins block
String result; 
if (numerator == 0) 
  result = "0"; 
else 
  if (denominator == 1) 
  result = numerator + ""; 
else 
  result = numerator + "/" + denominator; 
return result; 
}
private void reduce () 
{ // begins block
if (numerator != 0) 
{ // begins block
  int common = gcd  
    (Math.abs(numerator), denominator);
     numerator = numerator / common; 
     denominator = denominator / common; 
} // ends block
} 
private int gcd (int num1, int num2) 
{
while (num1 != num2) 
  if (num1 > num2) 
  num1 = num1 - num2; 
else 
  num2 = num2 - num1; 
return num1; 
} 

public int compareTo (Rational r1, Rational r2)
{ 

Float value1 = new Float ((float)r1.getNumerator() / r1.getDenominator()); 
Float value2 = new Float ((float)r2.getNumerator() / r2.getDenominator());  

int answer = value1.compareTo(value2);
return answer;

}
} 

Comparable接口的compareTo方法仅需要一个参数: 另一个与之进行比较的实例。 因此,它仅需要一个类型参数。 要修正您的类声明:

public class Rational implements Comparable<Rational>

继在当前的格局compareTo的实现,有一些小的修正和改进,这里是实现单向compareToComparable

  @Override
  public int compareTo(Rational o) {
    float mine = (float) getNumerator() / getDenominator();
    float other = (float) o.getNumerator() / o.getDenominator();
    return Float.compare(mine, other);
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM