Create a class called Rational for performing arithmetic with fractions. Write a
ID: 3891774 • Letter: C
Question
Create a class called Rational for performing arithmetic with fractions. Write a program to test your class. Use integer values to represent the private instance variables of the class - the numerator and the denominator. Provide a constructor that enables an object of this class to be initialized when it's declared. The constructor should store the fraction in reduced form. The fraction 2/4 is equivalent to 1/2 and would be stored in the object as 1 in the numerator and 2 in the denominator. Provide a no-argument constructor with default values in case no initializers are provided. You can assume all the rational numbers are positive numbers. Provide public methods that perform each of the following operations:
Add two Rational numbers: The result of the addition should be stored in reduced form. Implement this as a static method.
Subtract two Rational numbers: The result of the subtraction should be stored in reduced form. Implement this as a static method.
Multiply two Rational numbers: The result of the multiplication should be stored in reduced form. Implement this as a staticmethod.
Divide two Rational numbers: The result of the division should be stored in reduced form. Implement this as a static method.
Return a String representation of a Rational number in the form a/b, where a is the numerator and b is the denominator.
Return a String representation of a Rational number in floating-point format. Consider providing formatting capabilities that enable the user of the class to specify the number of digits of precision to the right of the decimal point.
the code provided
import java.util.Scanner;
public class RationalTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int numerator; // the numerator of a fraction
int denominator; // the denominator of a fraction
int digits; // digits to display in floating point format
Rational rational1; // the first rational number
Rational rational2; // second rational number
Rational result; // result of performing an operation
// read first fraction
System.out.print("Enter numerator 1: ");
numerator = input.nextInt();
System.out.print("Enter denominator 1: ");
denominator = input.nextInt();
rational1 = new Rational(numerator, denominator);
// read second fraction
System.out.print("Enter numerator 2: ");
numerator = input.nextInt();
System.out.print("Enter denominator 2: ");
denominator = input.nextInt();
rational2 = new Rational(numerator, denominator);
System.out.print("Enter precision: ");
digits = input.nextInt();
System.out.println("1. Add");
System.out.println("2. Subtract");
System.out.println("3. Multiply");
System.out.println("4. Divide");
System.out.println("5. Exit");
System.out.print("Choice: ");
int choice = input.nextInt(); // user's choice in the menu
while (choice != 5) {
switch (choice) {
case 1:
result = rational1.sum(rational2);
System.out.printf("a + b = %s = %s%n",
result.toString(),
result.toFloatString(digits));
break;
case 2:
result = rational1.subtract(rational2);
System.out.printf("a - b = %s = %s%n",
result.toString(),
result.toFloatString(digits));
break;
case 3:
result = rational1.multiply(rational2);
System.out.printf("a * b = %s = %s%n",
result.toString(),
result.toFloatString(digits));
break;
case 4:
result = rational1.divide(rational2);
System.out.printf("a / b = %s = %s%n",
result.toString(),
result.toFloatString(digits));
break;
}
System.out.print("Choice: ");
choice = input.nextInt();
}
}
}
Explanation / Answer
import java.util.Scanner;
class Rational
{
private int numerator;
private int denominator;
public Rational() //default constructor
{
numerator = 0;
denominator = 1;
}
public Rational (int a, int b)//argument constructor
{
numerator = a;
denominator = b;
}
public Rational sum (Rational r)
{
reduce(); //reduce the sum
int num, den;
den = denominator * r.getDenominator();
num = numerator * r.getDenominator() + r.getNumerator() * denominator;
return new Rational (num, den);
}
public Rational subtract (Rational r)
{
reduce(); //reduce the sum
int num, den;
den = denominator * r.getDenominator();
num = numerator * r.getDenominator() - r.getNumerator() * denominator;
return new Rational (num, den);
}
public Rational multiply (Rational r)
{
reduce(); //reduce the sum
int num, den;
den = denominator * r.getDenominator();
num = numerator * r.getNumerator();
return new Rational (num, den);
}
public Rational divide (Rational r)
{
reduce(); //reduce the sum
int num, den;
den = denominator * r.getNumerator();
num = numerator * r.getDenominator();
return new Rational (num, den);
}
public int getNumerator() { return numerator; }
public int getDenominator() { return denominator; }
public String toString () { return numerator + "/" + denominator; }
public void reduce() {
int factor;
factor = gcd(numerator, denominator);
numerator = numerator / factor;
denominator = denominator / factor;
}
private int gcd (int x, int y) {
int t;
while (y>0) {
t = x % y;
x = y;
y = t;
}
return x;
}
public float toFloatString(int digits) //convert fractional to float
{
return (float)(numerator *Math.pow(10,digits))/(float)(denominator *Math.pow(10,digits));
}
}
class RationalTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int numerator; // the numerator of a fraction
int denominator; // the denominator of a fraction
int digits; // digits to display in floating point format
Rational rational1; // the first rational number
Rational rational2; // second rational number
Rational result; // result of performing an operation
// read first fraction
System.out.print("Enter numerator 1: ");
numerator = input.nextInt();
System.out.print("Enter denominator 1: ");
denominator = input.nextInt();
rational1 = new Rational(numerator, denominator);
// read second fraction
System.out.print("Enter numerator 2: ");
numerator = input.nextInt();
System.out.print("Enter denominator 2: ");
denominator = input.nextInt();
rational2 = new Rational(numerator, denominator);
System.out.print("Enter precision: ");
digits = input.nextInt();
System.out.println("1. Add");
System.out.println("2. Subtract");
System.out.println("3. Multiply");
System.out.println("4. Divide");
System.out.println("5. Exit");
System.out.print("Choice: ");
int choice = input.nextInt(); // user's choice in the menu
while (choice != 5) {
switch (choice) {
case 1:
result = rational1.sum(rational2);
result.reduce();
System.out.printf("a + b = %s = %s%n",
result.toString(),
result.toFloatString(digits));
break;
case 2:
result = rational1.subtract(rational2);
result.reduce();
System.out.printf("a - b = %s = %s%n",
result.toString(),
result.toFloatString(digits));
break;
case 3:
result = rational1.multiply(rational2);
result.reduce();
System.out.printf("a * b = %s = %s%n",
result.toString(),
result.toFloatString(digits));
break;
case 4:
result = rational1.divide(rational2);
result.reduce();
System.out.printf("a / b = %s = %s%n",
result.toString(),
result.toFloatString(digits));
break;
}
System.out.print("Choice: ");
choice = input.nextInt();
}
}
}
Output:
Enter numerator 1: 2 Enter denominator 1: 4 Enter numerator 2: 3 Enter denominator 2: 8 Enter precision:3
1. Add
2. Subtract
3. Multiply
4. Divide
5. Exit
Choice: 1 a + b = 7/8 = 0.875
Choice: 2 a - b = 1/8 = 0.125
Choice: 5
Do ask if any doubt. Please upvote.
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.