Question: Add as many test methods as possible to your JUnit test. You should strive to test all methods within RationalNumber for correct behavior - meaning
Add as many test methods as possible to your JUnit test. You should strive to test all methods within RationalNumber for correct behavior - meaning you'll need to change a few method visibilities from private to public before testing. You should also add "setters" (mutator) methods to enable testing these previously-private methods.
RationalNumber.java
public class RationalNumber
{
private int numerator, denominator;
// -----------------------------------------------------------------
// Constructor: Sets up the rational number by ensuring a nonzero
// denominator and making only the numerator signed.
// -----------------------------------------------------------------
public RationalNumber(int numer, int denom)
{
if (denom == 0)
denom = 1;
// Make the numerator "store" the sign
if (denom < 0)
{
numer = numer * -1;
denom = denom * -1;
}
numerator = numer;
denominator = denom;
reduce();
}
// -----------------------------------------------------------------
// Returns the numerator of this rational number.
// -----------------------------------------------------------------
public int getNumerator()
{
return numerator;
}
// -----------------------------------------------------------------
// Returns the denominator of this rational number.
// -----------------------------------------------------------------
public int getDenominator()
{
return denominator;
}
// -----------------------------------------------------------------
// Returns the reciprocal of this rational number.
// -----------------------------------------------------------------
public RationalNumber reciprocal()
{
return new RationalNumber(denominator, numerator);
}
// -----------------------------------------------------------------
// Adds this rational number to the one passed as a parameter.
// A common denominator is found by multiplying the individual
// denominators.
// -----------------------------------------------------------------
public RationalNumber add(RationalNumber op2)
{
int commonDenominator = denominator * op2.getDenominator();
int numerator1 = numerator * op2.getDenominator();
int numerator2 = op2.getNumerator() * denominator;
int sum = numerator1 + numerator2;
return new RationalNumber(sum, commonDenominator);
}
// -----------------------------------------------------------------
// Subtracts the rational number passed as a parameter from this
// rational number.
// -----------------------------------------------------------------
public RationalNumber subtract(RationalNumber op2)
{
int commonDenominator = denominator * op2.getDenominator();
int numerator1 = numerator * op2.getDenominator();
int numerator2 = op2.getNumerator() * denominator;
int difference = numerator1 - numerator2;
return new RationalNumber(difference, commonDenominator);
}
// -----------------------------------------------------------------
// Multiplies this rational number by the one passed as a
// parameter.
// -----------------------------------------------------------------
public RationalNumber multiply(RationalNumber op2)
{
int numer = numerator * op2.getNumerator();
int denom = denominator * op2.getDenominator();
return new RationalNumber(numer, denom);
}
// -----------------------------------------------------------------
// Divides this rational number by the one passed as a parameter
// by multiplying by the reciprocal of the second rational.
// -----------------------------------------------------------------
public RationalNumber divide(RationalNumber op2)
{
return multiply(op2.reciprocal());
}
// -----------------------------------------------------------------
// Determines if this rational number is equal to the one passed
// as a parameter. Assumes they are both reduced.
// -----------------------------------------------------------------
public boolean isLike(RationalNumber op2)
{
return (numerator == op2.getNumerator() && denominator == op2.getDenominator());
}
// -----------------------------------------------------------------
// Returns this rational number as a string.
// -----------------------------------------------------------------
public String toString()
{
String result;
if (numerator == 0)
result = "0";
else if (denominator == 1)
result = numerator + "";
else
result = numerator + "/" + denominator;
return result;
}
// -----------------------------------------------------------------
// Reduces this rational number by dividing both the numerator
// and the denominator by their greatest common divisor.
// -----------------------------------------------------------------
private void reduce()
{
if (numerator != 0)
{
int common = gcd(Math.abs(numerator), denominator);
numerator = numerator / common;
denominator = denominator / common;
}
}
// -----------------------------------------------------------------
// Computes and returns the greatest common divisor of the two
// positive parameters. Uses Euclid's algorithm.
// -----------------------------------------------------------------
private int gcd(int num1, int num2)
{
while (num1 != num2)
if (num1 > num2)
num1 = num1 - num2;
else
num2 = num2 - num1;
return num1;
}
}
RationalTester.java
public class RationalTester
{
// -----------------------------------------------------------------
// Creates some rational number objects and performs various
// operations on them.
// -----------------------------------------------------------------
public static void main(String[] args)
{
RationalNumber r1 = new RationalNumber(6, 8);
RationalNumber r2 = new RationalNumber(1, 3);
RationalNumber r3, r4, r5, r6, r7;
System.out.println("First rational number: " + r1);
System.out.println("Second rational number: " + r2);
if (r1.isLike(r2))
System.out.println("r1 and r2 are equal.");
else
System.out.println("r1 and r2 are NOT equal.");
r3 = r1.reciprocal();
System.out.println("The reciprocal of r1 is: " + r3);
r4 = r1.add(r2);
r5 = r1.subtract(r2);
r6 = r1.multiply(r2);
r7 = r1.divide(r2);
System.out.println("r1 + r2: " + r4.toString());
System.out.println("r1 - r2: " + r5);
System.out.println("r1 * r2: " + r6);
System.out.println("r1 / r2: " + r7);
}
}
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
