В настоящее время я работаю над проектом, в котором мне нужно сравнить две фракции. Я не делал такого раньше, переопределяя метод, поэтому мне нужна небольшая помощь.
Вот то, что беспокоит меня;
Итак, у меня есть класс, называемый Fraction, и в этом классе у меня есть два поля.
public class Fraction {
private int denominator;
private int numerator;
public Fraction(int numerator, int denominator) {
//Throwing an error if the denominator is 0.
if (denominator == 0) {
throw new IllegalArgumentException("Denominator cannot be zero!");
}
//When both numbers are negative
if (denominator < 0 && numerator < 0) {
denominator *= -1;
numerator *= -1;
}
//When the numerator is negative
if (denominator < 0 && numerator > 0) {
denominator *= -1;
numerator *= -1;
}
this.denominator = denominator;
this.numerator = numerator;
}
public Fraction(int numerator) {
this.numerator = numerator;
this.denominator = 1;
}
public Fraction() {
this.numerator = 0;
this.denominator = 1;
}
У меня также есть пара других полезных методов для сравнения двух фракций, подобных этой:
//converts the current fraction to the lowest terms
public void toLowestTerms() {
int reminder = 0, gcd = 0;
int up = numerator, bottom = denominator;
while (up != 0 && bottom != 0) {
reminder = up % bottom;
up = bottom;
bottom = reminder;
gcd = up;
}
numerator /= gcd;
denominator /= gcd;
}
Итак, вот часть, в которой я застрял.
@Override
//must take in an "Object" to properly override the Object class's equals method, but should ultimately check if two fractions are equal
public boolean equals(Object obj) {
// If the object is compared with itself then return true
if(obj == this){
return true;
}
/* check if o is an instance of Complex or not
"null instanceof [type]" also returns false */
if (!(obj instanceof Fraction)) {
return false;
}
//This object is created for
Fraction compareObject = new Fraction(this.getNumerator(), this.getDenominator());
compareObject.toLowestTerms();
// typecast o to Fraction so that we can compare data members
Fraction x = (Fraction) obj;
//converting to the lowest terms to compare
((Fraction) obj).toLowestTerms();
// Compare the data members and return accordingly
return (compareObject.getNumerator()== x.getNumerator() && compareObject.getDenominator() == x.getDenominator());
}
Это правильно, или есть способ сделать это правильно? Технически я создаю объект, чтобы использовать метод toLowestTerms. Потому что, когда я хочу сравнить, например, 1/2 == 12/24, мне нужно уменьшить числитель и знаменатель, чтобы сделать хорошую проверку.
'Fraction compareObject = new Fraction(this.getNumerator(), this.getDenominator());
compareObject.toLowestTerms();`