Я создаю код, который хочу протестировать, используя тестирование jUnit.Я хочу сделать основные операции между двумя фракциями, такие как сложение, вычитание, умножение и деление.У меня проблемы с работой с объектами, и я просто всегда возвращаю то, с чего начал, а не с ожидаемым результатом.
В настоящее время я тестирую с помощью простого метода main.Мой метод toString работает нормально, как и мои методы конструктора.У меня просто проблемы с методами работы.Он никогда не меняет мой объект на правильный ответ.
Так что просто для примера, он должен распечатать "числитель равен 2, а знаменатель равен 3".Я просто продолжаю возвращаться 1 и 3. Вместо этого.
public class FractionalNumber {
private int numerator;
private int denominator;
/*
* Sets default values for numerator & denominator */
public FractionalNumber(){
numerator = 1;
denominator = 1;
}
/*
Precondition: denominator cannot be 0
@param num the numerator of the fraction
@param denom the denominator of the fraction, may not be 0 */
public FractionalNumber(int num, int denom){
this.numerator = num;
if(denom != 0)
this.denominator = denom;
else
throw new IllegalArgumentException("Denominator cannot be 0.");
}
/*
* Adjusts the sign of the numerator and denominator so the
* denominator is positive, if necessary */
private void normalize(){
if((denominator < 0 && numerator < 0) || denominator < 0){
denominator *= -1;
numerator *= -1;
}
}
/*
* Adds the paramter to this fractional number
* Precondition: this and otherNum are valid FractionalNumbers
* Postcondition: this is the sum of the two fractions
* Class Invariant: otherNum is not changed
* @param otherNum a FractionalNumber*/
public void add(final FractionalNumber otherNum){
FractionalNumber num1 = new FractionalNumber();
FractionalNumber num2 = otherNum;
num1.numerator = num1.numerator * num2.denominator + num2.numerator * num1.denominator;
num1.denominator = num1.denominator * num2.denominator;
FractionalNumber sum = new FractionalNumber();
sum.numerator = num1.numerator;
sum.denominator = num1.denominator;
}
public void subtract(final FractionalNumber otherNum){
FractionalNumber num1 = new FractionalNumber();
num1.numerator = num1.numerator * otherNum.denominator - otherNum.numerator * num1.denominator;
num1.denominator = num1.denominator * otherNum.denominator;
num1.normalize();
}
public void multiply(final FractionalNumber otherNum){
FractionalNumber num1 = new FractionalNumber();
num1.numerator = num1.numerator * otherNum.numerator;
num1.denominator = num1.denominator * otherNum.denominator;
num1.normalize();
}
public void divide(final FractionalNumber otherNum){
if (otherNum.numerator == 0 || otherNum.denominator == 0){
FractionalNumber num1 = new FractionalNumber();
num1.numerator = num1.numerator * otherNum.denominator;
num1.denominator = num1.denominator * otherNum.numerator;
num1.normalize();
}
}
public int getNumerator(){
return numerator;
}
public int getDenominator(){
return denominator;
}
public void setNumerator(int num){
numerator = num;
}
public void setDenominator(int denom){
denominator = denom;
}
/*
* @return true if this fraction and other would reduce to the
* same numerator and denominator, false otherwise
* @param other a FractionalNumber */
@Override
public boolean equals(Object other){
if (this == other) return true;
if (other == null) return false;
if(!(other instanceof FractionalNumber)) return false;
FractionalNumber otherNum = (FractionalNumber) other;
return numerator * otherNum.getDenominator() == otherNum.getNumerator() * denominator;
}
@Override
public String toString(){
String number = "numerator is " + numerator + " and denominator is " + denominator;
return number;
}
public static void main(String[] args){
FractionalNumber num = new FractionalNumber(1, 3);
FractionalNumber num1 = new FractionalNumber(1, 3);
num.add(num1);
System.out.println(num);
}
}