THe question is:
Modify the RationalNumber Class so that it implements the Comparable interface. To perform the comparison, compute an equivalent floating point value from the numerator and denominator for both Rational objects, then compare them using a tolerence value of 0.0001. Write a main driver to test your modifications.
I tried by got an error (see last program)
// THE Original Program
// Rational.java Author: Lewis/Loftus
public class Rational
{
private int numerator, denominator;
public Rational (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();
}
public int getNumerator ()
{
return numerator;
}
public int getDenominator ()
{
return denominator;
}
public Rational reciprocal ()
{
return new Rational (denominator, numerator);
}
public Rational add (Rational op2)
{
int commonDenominat or = denominator * op2.getDenomina tor();
int numerator1 = numerator * op2.getDenomina tor();
int numerator2 = op2.getNumerato r() * denominator;
int sum = numerator1 + numerator2;
return new Rational (sum, commonDenominat or);
}
public Rational subtract (Rational op2)
{
int commonDenominat or = denominator * op2.getDenomina tor();
int numerator1 = numerator * op2.getDenomina tor();
int numerator2 = op2.getNumerato r() * denominator;
int difference = numerator1 - numerator2;
return new Rational (difference, commonDenominat or);
}
public Rational multiply (Rational op2)
{
int numer = numerator * op2.getNumerato r();
int denom = denominator * op2.getDenomina tor();
return new Rational (numer, denom);
}
public Rational divide (Rational op2)
{
return multiply (op2.reciprocal ());
}
public boolean equals (Rational op2)
{
return ( numerator == op2.getNumerato r() &&
denominator == op2.getDenomina tor() );
}
public String toString ()
{
String result;
if (numerator == 0)
result = "0";
else
if (denominator == 1)
result = numerator + "";
else
result = numerator + "/" + denominator;
return result;
}
private void reduce ()
{
if (numerator != 0)
{
int common = gcd (Math.abs(numer ator), denominator);
numerator = numerator / common;
denominator = denominator / common;
}
}
private int gcd (int num1, int num2)
{
while (num1 != num2)
if (num1 > num2)
num1 = num1 - num2;
else
num2 = num2 - num1;
return num1;
}
}
//MY PROGRAM
public class Rational implements Comparable
{
private int numerator, denominator;
public Rational (int numer, int denom)
{
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 ()
{
return denominator;
}
public Rational reciprocal ()
{
return new Rational (denominator, numerator);
}
public Rational add (Rational op2)
{
int commonDenominat or = denominator * op2.getDenomina tor();
int numerator1 = numerator * op2.getDenomina tor();
int numerator2 = op2.getNumerato r() * denominator;
int sum = numerator1 + numerator2;
return new Rational (sum, commonDenominat or);
}
public Rational subtract (Rational op2)
{
int commonDenominat or = denominator * op2.getDenomina tor();
int numerator1 = numerator * op2.getDenomina tor();
int numerator2 = op2.getNumerato r() * denominator;
int difference = numerator1 - numerator2;
return new Rational (difference, commonDenominat or);
}
public Rational multiply (Rational op2)
{
int numer = numerator * op2.getNumerato r();
int denom = denominator * op2.getDenomina tor();
return new Rational (numer, denom);
}
public Rational divide (Rational op2)
{
return multiply (op2.reciprocal ());
}
public boolean equals (Rational op2)
{
return ( numerator == op2.getNumerato r() &&
denominator == op2.getDenomina tor() );
}
public String toString ()
{
String result;
if (numerator == 0)
result = "0";
else
if (denominator == 1)
result = numerator + "";
else
result = numerator + "/" + denominator;
return result;
}
private void reduce ()
{
if (numerator != 0)
{
int common = gcd (Math.abs(numer ator), denominator);
numerator = numerator / common;
denominator = denominator / common;
}
}
private int gcd (int num1, int num2)
{
while (num1 != num2)
if (num1 > num2)
num1 = num1 - num2;
else
num2 = num2 - num1;
return num1;
}
public float compute ()
{
float value = getNumerator() / getDenominator( );
return value;
}
public int compareTo(Ratio nal op2)
{
if (Math.abs(compu te() - op2.compute()) < .0001)
return 0;
if (compute() > op2.compute())
return + 1;
if (compute() < op2.compute())
return - 1;
}
}
THIS IS WHAT I HAVE AND I GET THE ERROR :Rational.java: 7: Rational should be declared abstract; it does not define compareTo(java. lang.Object) in Rational. THANKS FOR THE HELP
Modify the RationalNumber Class so that it implements the Comparable interface. To perform the comparison, compute an equivalent floating point value from the numerator and denominator for both Rational objects, then compare them using a tolerence value of 0.0001. Write a main driver to test your modifications.
I tried by got an error (see last program)
// THE Original Program
// Rational.java Author: Lewis/Loftus
public class Rational
{
private int numerator, denominator;
public Rational (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();
}
public int getNumerator ()
{
return numerator;
}
public int getDenominator ()
{
return denominator;
}
public Rational reciprocal ()
{
return new Rational (denominator, numerator);
}
public Rational add (Rational op2)
{
int commonDenominat or = denominator * op2.getDenomina tor();
int numerator1 = numerator * op2.getDenomina tor();
int numerator2 = op2.getNumerato r() * denominator;
int sum = numerator1 + numerator2;
return new Rational (sum, commonDenominat or);
}
public Rational subtract (Rational op2)
{
int commonDenominat or = denominator * op2.getDenomina tor();
int numerator1 = numerator * op2.getDenomina tor();
int numerator2 = op2.getNumerato r() * denominator;
int difference = numerator1 - numerator2;
return new Rational (difference, commonDenominat or);
}
public Rational multiply (Rational op2)
{
int numer = numerator * op2.getNumerato r();
int denom = denominator * op2.getDenomina tor();
return new Rational (numer, denom);
}
public Rational divide (Rational op2)
{
return multiply (op2.reciprocal ());
}
public boolean equals (Rational op2)
{
return ( numerator == op2.getNumerato r() &&
denominator == op2.getDenomina tor() );
}
public String toString ()
{
String result;
if (numerator == 0)
result = "0";
else
if (denominator == 1)
result = numerator + "";
else
result = numerator + "/" + denominator;
return result;
}
private void reduce ()
{
if (numerator != 0)
{
int common = gcd (Math.abs(numer ator), denominator);
numerator = numerator / common;
denominator = denominator / common;
}
}
private int gcd (int num1, int num2)
{
while (num1 != num2)
if (num1 > num2)
num1 = num1 - num2;
else
num2 = num2 - num1;
return num1;
}
}
//MY PROGRAM
public class Rational implements Comparable
{
private int numerator, denominator;
public Rational (int numer, int denom)
{
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 ()
{
return denominator;
}
public Rational reciprocal ()
{
return new Rational (denominator, numerator);
}
public Rational add (Rational op2)
{
int commonDenominat or = denominator * op2.getDenomina tor();
int numerator1 = numerator * op2.getDenomina tor();
int numerator2 = op2.getNumerato r() * denominator;
int sum = numerator1 + numerator2;
return new Rational (sum, commonDenominat or);
}
public Rational subtract (Rational op2)
{
int commonDenominat or = denominator * op2.getDenomina tor();
int numerator1 = numerator * op2.getDenomina tor();
int numerator2 = op2.getNumerato r() * denominator;
int difference = numerator1 - numerator2;
return new Rational (difference, commonDenominat or);
}
public Rational multiply (Rational op2)
{
int numer = numerator * op2.getNumerato r();
int denom = denominator * op2.getDenomina tor();
return new Rational (numer, denom);
}
public Rational divide (Rational op2)
{
return multiply (op2.reciprocal ());
}
public boolean equals (Rational op2)
{
return ( numerator == op2.getNumerato r() &&
denominator == op2.getDenomina tor() );
}
public String toString ()
{
String result;
if (numerator == 0)
result = "0";
else
if (denominator == 1)
result = numerator + "";
else
result = numerator + "/" + denominator;
return result;
}
private void reduce ()
{
if (numerator != 0)
{
int common = gcd (Math.abs(numer ator), denominator);
numerator = numerator / common;
denominator = denominator / common;
}
}
private int gcd (int num1, int num2)
{
while (num1 != num2)
if (num1 > num2)
num1 = num1 - num2;
else
num2 = num2 - num1;
return num1;
}
public float compute ()
{
float value = getNumerator() / getDenominator( );
return value;
}
public int compareTo(Ratio nal op2)
{
if (Math.abs(compu te() - op2.compute()) < .0001)
return 0;
if (compute() > op2.compute())
return + 1;
if (compute() < op2.compute())
return - 1;
}
}
THIS IS WHAT I HAVE AND I GET THE ERROR :Rational.java: 7: Rational should be declared abstract; it does not define compareTo(java. lang.Object) in Rational. THANKS FOR THE HELP
Comment