저는 Java의 초보자이며 이것은 Comparable 인터페이스를 처음 사용하는 클래스입니다. r1과 r2를 비교할 때 왜 0을 계속 유지하는지 이해할 수 없습니다. 누군가 내 코드에 문제가 있다고 설명 할 수 있습니까? 고맙습니다. r1
r2
와 차이가 테스트중인 경우, 이는 이하 1
을 때합리적인 클래스 (Java)에 대한 비교 가능한 인터페이스 구현
public class Rational implements Comparable<Rational>{
private int num; //numerator
private int denom; //denominator
public Rational() {
num = 0;
denom = 1;
}
public Rational(int num, int denom) {
if(denom <=0){
throw new ArithmeticException("You cannot divide by a non-positive number");
}
this.num = num;
this.denom = denom;
}
//returns numerator of this rational number
public int getNum() {
return num;
}
//returns denominator of this rational number
public int getDenom() {
return denom;
}
public Rational add(Rational rhs) {
return new Rational(num*rhs.denom+rhs.num*denom, denom*rhs.denom);
}
public Rational subtract(Rational rhs) {
return new Rational(num*rhs.denom-rhs.num*denom, denom*rhs.denom);
}
public Rational multiply(Rational rhs) {
return new Rational(num*rhs.num, denom*rhs.denom);
}
public Rational divide(Rational rhs) {
return new Rational(num*rhs.denom, denom*rhs.num);
}
public String toString() {
String result;
if (num == 0)
result = "0";
else if(denom == 1)
result = num + "";
else
result = num + "/" + denom;
return result;
}
public int compareTo(Rational rhs){
double r1 = ((double) getNum()/getDenom());
double r2 = ((double)rhs.getNum()/rhs.getDenom());
return (int) (r1 - r2);
}
public static void main(String[] args) {
Rational r1 = new Rational(1, 2); // 1/2
Rational r2 = new Rational(3, 4); // 3/4
Rational result = r1.add(r2);
Rational result1 = r1.subtract(r2);
Rational result2 = r1.multiply(r2);
Rational result3 = r1.divide(r2);
System.out.println("r1 + r2 = " + result + "\n" + "r1 - r2 = " + result1 + "\n" + "r1*r2 = "+ result2 + "\n" + "r1/r2 = " + result3 + "\n" + (r1.compareTo(r2)));
}
}
두 배 사이의 절대 차이가 1보다 작은 경우 0을 반환합니다. (1/3) - (1/2)이다. 'Double.compare'를 사용하십시오. –
'getNum() * rhs.getDenom()'과'rhs.getNum() * getDenom()'을 비교하여 double을 전혀 사용하지 않아도됩니다. 여전히 long 값과 Long.compare (a, b)를 사용하고 싶습니다. –
@AndyTurner 오, 고맙습니다. –