Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

(JAVA) Write a Fraction class – that is, write your own class that will represen

ID: 3764872 • Letter: #

Question

(JAVA) Write a Fraction class – that is, write your own class that will represent a fraction in your program. Each variable of type Fraction represents a single fraction. That means that the class should have at least two member variables that should be private: the numerator and the denominator of the fraction. The class also must have the following public member functions: • Fraction(int n, int d); // constructor that defines a fraction n/d • Fraction(); // constructor that defines a default fraction of 0/1 • Fraction(Scanner s); // constructor that defines a fraction via Scanner input • double toDecimal(); // returns the decimal value of the fraction • String toString(); // returns the string form of the fraction o "numerator" if denominator is 1 o "numerator/denominator (decimal, with three decimal places)" otherwise • int getNumerator(); // returns the numerator of the fraction • int getDenominator(); // returns the denominator of the fraction • Fraction plus(Fraction f); // returns fraction + parameter • Fraction minus(Fraction f); // returns fraction - parameter • Fraction times(Fraction f); // returns fraction * parameter • Fraction divides(Fraction f); // returns fraction / parameter You have been provided a private method: • int[] simplifyFraction(int[] f); // returns simplified version of parameter Using this method, all constructors should make sure that the fraction is in reduced form. You may not change the public API – that is, any methods not listed above must be made private.

Explanation / Answer

//Fraction.java
import java.util.Scanner;
public class Fraction
{
   //instance variable declarations
   private int numerator;
   private int denominator;

  
   //Default constructor
   public Fraction()
   {
       numerator=0;
       denominator=1;
   }

   //parameter constructor
   public Fraction(int n, int d)
   {
       numerator=n;
       denominator=d;
   }

   //Constructor that takes Scanner class object
   public Fraction(Scanner scanner)
   {
       //read numerator and denominator
       System.out.println("Enter numerator : ");
       numerator=scanner.nextInt();
       System.out.println("Enter denominnator : ");
       denominator=scanner.nextInt();
   }

   //Returns numerator
   public int getNumerator()
   {
       return numerator;
   }

   //Returns denominator
   public int getDenominator()
   {
       return denominator;
   }

   //Returns decimal value of fraction
   public double toDecimal()
   {
       return (double)numerator/denominator;
   }

   @Override
   //Returns string representaion of 3 decimals
   public String toString()
   {
       return String.format("%.3f", ((double)numerator/denominator));
   }

   //Addition of fraction,f
   Fraction plus(Fraction f)
   {
       //temporary numerator
       int tempNumerator=
               (this.numerator*f.getDenominator()+f.getNumerator()*this.denominator);
       //temporary denominator
       int tempDenominator=(this.denominator*f.getDenominator());

       //return a new Fraction with numerator and denominator
       return new Fraction(tempNumerator, tempDenominator);

   }

   //Subtraction of fraction,f
   Fraction minus(Fraction f)
   {
       //temporary numerator
       int tempNumerator=
               (this.numerator*f.getDenominator()-f.getNumerator()*this.denominator);
       //temporary denominator
       int tempDenominator=(this.denominator*f.getDenominator());

       //return a new Fraction with numerator and denominator
       return new Fraction(tempNumerator, tempDenominator);

   }

   //Multiplication of fraction,f
   Fraction times(Fraction f)
   {
       //temporary numerator
       int tempNumerator=this.numerator*f.getNumerator();
       //temporary denominator
       int tempDenominator=this.denominator*f.getDenominator();

       //return a new Fraction with numerator and denominator
       return new Fraction(tempNumerator, tempDenominator);

   }
  
   //Division of fraction,f
   Fraction divides(Fraction f)
   {
       //temporary numerator
       int tempNumerator=this.numerator*f.getDenominator();
       //temporary denominator
       int tempDenominator=this.denominator*f.getNumerator();

       //return a new Fraction with numerator and denominator
       return new Fraction(tempNumerator, tempDenominator);
   }
  
   // Reduces a current object to lowest terms.
   public Fraction simplifyFraction(Fraction fraction)
   {
       int common = gcd(fraction.getNumerator(), fraction.getDenominator());
       
       int n =fraction.getNumerator()/ common;
        int d =fraction.getDenominator()/ common;
       
       return new Fraction(n, d);
   }

   // Returns the greatest common divisor of a and b.
   private static int gcd(int a, int b)
   {
       if (a == 0)
           return b;
       if (b == 0)
           return a;
       if (a > b)
           return gcd(b, a%b);
      
       return gcd(a, b%a);
   }
}

--------------------------------------------

/**
* The java progra TestFraction that tests the Fraction class
* by calling plus, minus ,divide and multiply methods on fraction
* objects and print the results to console.
* */
//TestFraction.java
import java.util.Scanner;
public class TestFraction
{
   public static void main(String[] args)
   {
       Fraction f1=new Fraction();      
       System.out.println("Default fraction");
       System.out.println(f1.toString());
      
      
       Fraction f2=new Fraction(1,3);
       System.out.println("Parameter fraction");
       System.out.println(f2.toString());
      
      
      
       Fraction f3=new Fraction(25,100);
       System.out.println("Simplified fraction");
       Fraction reducedFraction=f3.simplifyFraction(f3);
      
       System.out.println(reducedFraction.toString());
      
       System.out.println("Adding two fractions");
       Fraction addition=f3.plus(f2);
      
       System.out.println(addition.toString());
      
       System.out.println("Subtracting fraction");
       Fraction minus=f3.minus(f2);      
       System.out.println(minus.toString());
      
      
       System.out.println("Multiplication of fraction");
       Fraction multiplication=f3.times(f2);  
       System.out.println(multiplication.toString());
      
      
       System.out.println("Division of fraction");
       Fraction division=f3.divides(f2);  
       System.out.println(division.toString());
      
       Scanner scanner=new Scanner(System.in);
       System.out.println("Reading fraction");
       Fraction readFraction=new Fraction(scanner);
       System.out.println(readFraction.toString());
      
      
   }
}


------------------------------------------------------

Sample Output:

Default fraction
0.000
Parameter fraction
0.333
Simplified fraction
0.250
Adding two fractions
0.583
Subtracting fraction
-0.083
Multiplication of fraction
0.083
Division of fraction
0.750
Reading fraction
Enter numerator :
1
Enter denominnator :
2
0.500