Add a private method simplify() to the following Java program that converts a fraction to its simplest form. For example, the fraction 20 / 60 should be stored in the class instance variables as 1 / 3 (i.e. numerator = 1, denominator = 3). N.B. you will need a method to determine the Greatest Common Divisor (GCD. Remember, both of these methods (simplify and gcd) must be private. As these methods are private, client programs cannot access them. So, how are they to be used? They can only be accessed within the Fraction class. Given their purpose, it would mean that any Fraction class method that modifies the instance variables (e.g.: input, add, constructor, set) should call the simplify() method to reduce the instance variables to their minimum values. Thus, these methods are used only for housekeeping; they are not to be used by client programs. Program: import java.util.ArrayList; import java.util.Scanner; //Define the class Fraction class Fraction { private int n, d; public Fraction() { this.n = this.d = 0; //Initialize the values } public Fraction(int n, int d) { this.n = n; //Initialize the variables this.d = d; } //Define the getter function getNum() that returns the numerator public int getNum() { //Returns numerator return n; } //Define the getter function getDen() that returns the denominator public int getDen() { //Returns denominator return d; } //Define the boolean function isZero() that returns 0 if numerator is 0 and denominator is not equals to zero public boolean isZero() { return(getNum() == 0 && getDen() != 0); } public boolean isequals(Object c) { Fraction f = (Fraction) c; return(Integer.compare(n,f.n))==0 && (Integer.compare(d,f.d)==0); } //Define the function getSimplifiedFraction() that returns the simplified fraction public String getSimplifiedFraction() { //Decalre the string variable result to store the result String result = ""; //if the numerator and denominator both are zero if(getNum() == 0 && getDen() == 0) //result is zero result = "0"; //if the numerator is zero and denominator is non-zero else if(isZero()) //result is zero result = "0"; //if the numerator is non-zero and denominator is zero else if(getNum() != 0 && getDen() == 0) //result is Undefined result = "Undefined"; //for a defined and non-zero fraction else { //if the remainder is zero if(getNum() % getDen() == 0) result = (getNum() / getDen()) + ""; //if the numerator and denominator both are greater than zero else if(getNum() < 0 && getDen() < 0) result = (getNum() * -1) + "/" + (getDen() * -1); //if any of them is zero else if(getNum() < 0 || getDen() < 0) { //if the numerator is greater than zero if(getNum() < 0) result = "-" + (getNum() * -1) + "/" + getDen(); // appending a sign. //if the denominator is zero else result = "-" + getNum() + "/" + (getDen() * -1); // appending a sign. } //both are non-zero else result = (getNum() + "/" + getDen()); } //return the result return result; } //Define the method display() that displays the resultant fraction public void display() { //Call and display the fraction System.out.println(getSimplifiedFraction()); } public Fraction add(Fraction rhs) { Fraction sum = new Fraction(); sum.d = d * rhs.d; sum.n = n * rhs.d + d * rhs.n; sum.simplify(); return sum; } private void simplify() { int a,b; if(Math.abs(n) > Math.abs(d)) { a = Math.abs(n); b = Math.abs(d); } else { a = Math.abs(d); b = Math.abs(n); } int r = a%b; while(r != 0) { a = b; b = r; r = a%b; } //divide numerator and denominator by b n /= b; d /= b; } } class Main { public static void main(String[] args) { String res; int num, den, num1, den1; ArrayList fractions = new ArrayList<>(); Scanner sc = new Scanner(System.in); do { System.out.print("Enter the num: "); num = Integer.parseInt(sc.nextLine().trim()); if(num < 0) break; System.out.print("Enter the den: "); den = Integer.parseInt(sc.nextLine().trim()); Fraction fraction = new Fraction(num, den); System.out.print("Enter the num to compare: "); num1 = Integer.parseInt(sc.nextLine().trim()); if(num1 < 0) break; System.out.print("Enter the den to compare: "); den1 = Integer.parseInt(sc.nextLine().trim()); Fraction fraction1 = new Fraction(num1, den1); if(fraction1.isequals(fraction)) { System.out.println("\nTrue-> Second fraction is equal to First Fraction"); } else System.out.println("\nFalse-> Second fraction is not equal to First Fraction"); // if isequal() returns zero. fractions.add(fraction); res = fraction.getSimplifiedFraction(); System.out.println("Fraction added to list as: " + res + "\n"); //result is stored in ‘res’ variable }while(res != "0"); //Display all fractions that are stored in the ArrayList System.out.println("\nDISPLAYING ALL FRACTIONS:\n" + "-------------------------"); //Use the loop to display the values stored in the ArrayList for(Fraction fr : fractions) fr.display(); //to print the new line System.out.println(); sc.close(); Fraction f = new Fraction(4, 8); System.out.println("1st fraction: "); f.display(); Fraction fc = new Fraction(8, 24); System.out.println("2nd fraction: "); fc.display(); Fraction res1 = f.add(fc); System.out.println("Sum: "); res1.display(); } }
Add a private method simplify() to the following Java program that converts a fraction
to its simplest form. For example, the fraction 20 / 60 should be stored in the
class instance variables as 1 / 3 (i.e. numerator = 1, denominator = 3). N.B.
you will need a method to determine the Greatest Common Divisor (GCD.
Remember, both of these methods (simplify and gcd) must be private. As
these methods are private, client programs cannot access them. So, how are
they to be used? They can only be accessed within the Fraction class. Given
their purpose, it would mean that any Fraction class method that modifies the
instance variables (e.g.: input, add, constructor, set) should call the simplify()
method to reduce the instance variables to their minimum values. Thus, these
methods are used only for housekeeping; they are not to be used by client
programs.
Program:
import java.util.ArrayList;
import java.util.Scanner;
//Define the class Fraction
class Fraction
{
private int n, d;
public Fraction()
{
this.n = this.d = 0; //Initialize the values
}
public Fraction(int n, int d)
{
this.n = n; //Initialize the variables
this.d = d;
}
//Define the getter function getNum() that returns the numerator
public int getNum()
{
//Returns numerator
return n;
}
//Define the getter function getDen() that returns the denominator
public int getDen()
{
//Returns denominator
return d;
}
//Define the boolean function isZero() that returns 0 if numerator is 0 and denominator is not equals to zero
public boolean isZero()
{
return(getNum() == 0 && getDen() != 0);
}
public boolean isequals(Object c)
{
Fraction f = (Fraction) c;
return(Integer.compare(n,f.n))==0 && (Integer.compare(d,f.d)==0);
}
//Define the function getSimplifiedFraction() that returns the simplified fraction
public String getSimplifiedFraction()
{
//Decalre the string variable result to store the result
String result = "";
//if the numerator and denominator both are zero
if(getNum() == 0 && getDen() == 0)
//result is zero
result = "0";
//if the numerator is zero and denominator is non-zero
else if(isZero())
//result is zero
result = "0";
//if the numerator is non-zero and denominator is zero
else if(getNum() != 0 && getDen() == 0)
//result is Undefined
result = "Undefined";
//for a defined and non-zero fraction
else
{
//if the remainder is zero
if(getNum() % getDen() == 0)
result = (getNum() / getDen()) + "";
//if the numerator and denominator both are greater than zero
else if(getNum() < 0 && getDen() < 0)
result = (getNum() * -1) + "/" + (getDen() * -1);
//if any of them is zero
else if(getNum() < 0 || getDen() < 0)
{
//if the numerator is greater than zero
if(getNum() < 0)
result = "-" + (getNum() * -1) + "/" + getDen(); // appending a sign.
//if the denominator is zero
else
result = "-" + getNum() + "/" + (getDen() * -1); // appending a sign.
}
//both are non-zero
else
result = (getNum() + "/" + getDen());
}
//return the result
return result;
}
//Define the method display() that displays the resultant fraction
public void display()
{
//Call and display the fraction
System.out.println(getSimplifiedFraction());
}
public Fraction add(Fraction rhs) {
Fraction sum = new Fraction();
sum.d = d * rhs.d;
sum.n = n * rhs.d + d * rhs.n;
sum.simplify();
return sum;
}
private void simplify()
{
int a,b;
if(Math.abs(n) > Math.abs(d))
{
a = Math.abs(n);
b = Math.abs(d);
}
else
{
a = Math.abs(d);
b = Math.abs(n);
}
int r = a%b;
while(r != 0)
{
a = b;
b = r;
r = a%b;
}
//divide numerator and denominator by b
n /= b;
d /= b;
}
}
class Main
{
public static void main(String[] args)
{
String res;
int num, den, num1, den1;
ArrayList<Fraction> fractions = new ArrayList<>();
Scanner sc = new Scanner(System.in);
do
{
System.out.print("Enter the num: ");
num = Integer.parseInt(sc.nextLine().trim());
if(num < 0)
break;
System.out.print("Enter the den: ");
den = Integer.parseInt(sc.nextLine().trim());
Fraction fraction = new Fraction(num, den);
System.out.print("Enter the num to compare: ");
num1 = Integer.parseInt(sc.nextLine().trim());
if(num1 < 0)
break;
System.out.print("Enter the den to compare: ");
den1 = Integer.parseInt(sc.nextLine().trim());
Fraction fraction1 = new Fraction(num1, den1);
if(fraction1.isequals(fraction))
{
System.out.println("\nTrue-> Second fraction is equal to First Fraction");
}
else
System.out.println("\nFalse-> Second fraction is not equal to First Fraction"); // if isequal() returns zero.
fractions.add(fraction);
res = fraction.getSimplifiedFraction();
System.out.println("Fraction added to list as: " + res + "\n"); //result is stored in ‘res’ variable
}while(res != "0");
//Display all fractions that are stored in the ArrayList
System.out.println("\nDISPLAYING ALL FRACTIONS:\n" + "-------------------------");
//Use the loop to display the values stored in the ArrayList
for(Fraction fr : fractions)
fr.display();
//to print the new line
System.out.println();
sc.close();
Fraction f = new Fraction(4, 8);
System.out.println("1st fraction: ");
f.display();
Fraction fc = new Fraction(8, 24);
System.out.println("2nd fraction: ");
fc.display();
Fraction res1 = f.add(fc);
System.out.println("Sum: ");
res1.display();
}
}
Trending now
This is a popular solution!
Step by step
Solved in 5 steps with 3 images