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

To test your Fraction class, you should, at a minimum, call the methods you crea

ID: 3833418 • Letter: T

Question

To test your Fraction class, you should, at a minimum, call the methods you created with the test cases you manually worked on in Step 1 of the lab. There are several approaches you can take:

1. Write the "usual" interactive driver, and manually enter the test cases.

2. Write a non-interactive driver, and test using just the public interface. So, in your driver, you might create two Fraction objects, add them (using the Fraction class's add() method), create a Fraction with the expected correct result (from your paper calculations in step 1 of the lab), and then check to make sure the Fraction returned from the add() method is equal() to the expected Fraction.

3. A third approach would be to write some additional methods in your Fraction class whose purpose is just to test the code. As these methods are internal to your Fraction class, they have access to the private fields. So, with this approach, you could write an addFractionTest() method that took six integers -- a numerator and denominator for one fraction, a numerator and denominator for a second fraction, and a numerator and denominator for the expected result. In your test method you'd create two fractions, add them using the add() method (the method you're testing), and then check the numerator and denominator of the resulting fraction.

Rather than repeating code, you are encouraged to write a testing method for each of the methods you are testing, and then call each of these methods with the test cases. For example, you could write the following method:

This method would take two Fraction objects as input, add, them, and then check to make sure the result (another Fraction object) was correct.

How would I implelement that code:

to this one?:

fraction class:

public class Fraction
{
/**
* local variables
*/
private int numerator;
private int denominator;
private int y;
/**
* Fraction Constructor method
*/
public Fraction()
{
numerator = 0;
denominator = 1;
}
  
/**
* Copy Constructor
*/
public Fraction(Fraction y)
{
numerator = 1;
denominator = 1;
}
  
/**
* Overloaded Constructor
*/
public Fraction (int numerator, int denominator)
{
this.numerator = numerator;
this.denominator = denominator;
}
  
  
/**
* simply method that calculates the intial numerator and denominator
*/
private Fraction simplify(int n, int d)
{
int smallest = 0;
int newNum = 0;
int newDem= 0;
if(n < d)
{
smallest = n;
if(d % n == 0)
{
return new Fraction(1, d/n);
}
  
}
if(d < n)
{
smallest = d;
if(n % d == 0)
{
return new Fraction(n/d, 1);
}
}
if(d == n)
{
return new Fraction(1,1);
}
for(int i = smallest - 1; i > 0; i--)
{
if(smallest % i == 0)
{
newNum = n/1;
newDem = d/i;
break;
}
}
if(newNum == 0)
{
return new Fraction(n,d);
}
else
{
return new Fraction(newNum, newDem);
}
}
  
  
/**
* addition method for fraction class
*/
public Fraction add(Fraction a)
{
int newNumerator = 0;
int newDenominator = 0;
if(a.denominator == this. denominator)
{
newNumerator = a.numerator + this.numerator;
return simplify(newNumerator, a.denominator);
}
  
else
{
newNumerator = (a.numerator * this.denominator) + (this.numerator * a.denominator);
newDenominator = a.denominator * this.denominator;
return simplify(newNumerator, newDenominator);
}
  
}
  
/**
* subtraction method for fraction class
*/
public Fraction subtract(Fraction a)
{
int newNumerator = ((numerator*a.denominator) - (a.numerator*denominator));
int newDenominator = denominator*a.denominator;
Fraction x = new Fraction (newNumerator, newDenominator);
return simplify(newNumerator, newDenominator);
}
/**
* multiply method for fraction class
*/
public Fraction multiply(Fraction a)
{
int newNumerator = this.numerator*a.numerator;
int newDenominator = this.denominator*a.denominator;
Fraction x = new Fraction (newNumerator, newDenominator);
return simplify(newNumerator, newDenominator);
}
  
/**
* division method for fraction class
*/
public Fraction divide(Fraction a)
{
int newNumerator = numerator*a.denominator;
int newDenominator = denominator*a.numerator;
Fraction x = new Fraction (newNumerator, newDenominator);
return simplify(newNumerator, newDenominator);
}
  
/**
* compareTo method for fraction class that compares old num and den to new num and den.
*/
public int compareTo(Fraction a)
{
int result = 0;
double frac1 = this.numerator/this.denominator;
double frac2 = a.numerator/a.denominator;
  
if(frac1 < frac2)
{
result = 1;
}
  
else if(frac1 > frac2)
{
result = -1;
}
else
{
return 0;
}
return result;
}

/**
* toString method to display numerator and denominator after calculations
*/
public String toString()
{
return this.numerator + "/" + this.denominator;
}
}

driver:

import java.util.*;
import java.io.*;

public class Driver
{
public static void main(String[] args)
{
// local variables
int num;
int dem;
int num2;
int dem2;
// scanner object
Scanner keyboard = new Scanner(System.in);
// stores first num
System.out.println("Enter the first numerator: ");
num = keyboard.nextInt();
  
// stores first den
System.out.println("Enter the first denominator: ");
dem = keyboard.nextInt();
  
// stores second num
System.out.println("Enter the second numerator: ");
num2 = keyboard.nextInt();
  
// stores second dem
System.out.println("Enter the second denominator: ");
dem2 = keyboard.nextInt();
  
//created fraction object to store all data
Fraction a = new Fraction(num, dem);
Fraction b = new Fraction(num2, dem2);
  
// using add, subtract, multiply, and divide methods from fraction class to calcuate answers.
System.out.println("Addition: " + a.add(b));
System.out.println("Subtraction: " + a.subtract(b));
System.out.println("Multiplication: " + a.multiply(b));
System.out.println("Division: " + a.divide(b));
System.out.println("CompareTo: " + a.compareTo(b));
}
}//end of main

when i add:

public static void addFractionTest(Fraction fr1, Fraction fr2, Fraction expectedSumFr)
{

int newNumerator = 0;
int newDenominator = 0;
if(fr1.denominator == fr2.denominator)
{
newNumerator = fr1.numerator+fr2.numerator;
System.out.printf("%d ",newNumerator);
System.out.printf("%d ",fr1.denominator);
expectedSumFr = simplify(newNumerator, fr1.denominator);
}
else
{
newNumerator = fr1.numerator * fr2.numerator+ fr2.numerator*fr1.numerator;
System.out.printf("%d ",newNumerator);
newDenominator = fr1.denominator * fr2.denominator;
System.out.printf("%d ",fr1.denominator);
expectedSumFr = simplify(newNumerator, newDenominator);
}
System.out.printf("%d ",expectedSumFr.numerator);
System.out.printf("%d ",expectedSumFr.denominator);
return ;
}

it doesnt work, what is the problem with this?

Explanation / Answer

Fraction.java

public class Fraction {
   private int numer;
   private int denom;

   // ACCESSORS
   public int getNumer() {
       return numer;
   }

   public int getDenom() {
       return denom;
   }

   public String toString() {
       return numer + "/" + denom;
   }

   // MUTATORS
   public void setNumer(int n) {
       numer = n;
   }

   public void setDenom(int d) {
       if (d != 0)
           denom = d;
       else {
           throw new IllegalArgumentException(
                   "** Denominator Must not be Zero **");
       }
   }

   // DEFAULT CONSTRUCTOR - no args passed in
   public Fraction() {
       this(0, 1); // "this" means call a fellow constructor
   }

   // 1 arg CONSTRUCTOR - 1 arg passed in
   // assume user wants whole number
   public Fraction(int n) {
       this(n, 1); // "this" means call a fellow constructor

   }

   // FULL CONSTRUCTOR - an arg for each class data member
   public Fraction(int n, int d) {
       int gcd = this.gcd(n, d);
       // if GCD is negative, change to positive
       if (gcd < 0) {
           gcd = -gcd;
       }
       setNumer(n / gcd); // i.e. setNumer( n/gcd );
       setDenom(d / gcd); // same here
   }

   // COPY CONSTRUCTOR - takes ref to some already initialized Fraction object
   public Fraction(Fraction other) {
       this(other.numer, other.denom); // call my full C'Tor with other
                                       // Fraction's data
   }

   private void reduce() {
       // determine the greatest common divisor
       int gcd = this.gcd(numer, denom);
       // if GCD is negative, change to positive
       if (gcd < 0) {
           gcd = -gcd;
       }
       // divide gcd into both numerator and denominator
       numer = numer / gcd;
       denom = denom / gcd;
   }

   // Method which will find Greatest Common Divisor
   private Integer gcd(Integer a, Integer b) {
       // % is modulus which is the remainder of a division
       // base case
       if ((a % b) == 0) {
           return b;
       }
       // recursive case
       else {
           return gcd(b, a % b);
       }
   }

   // This method is used to add two Fractions
   public Fraction add(Fraction f) {

       int a = this.numer;
       int b = this.denom;
       int c = f.numer;
       int d = f.denom;
       int num = (a * d + b * c);
       int den = (b * d);
       Fraction frac = new Fraction(num, den);
       frac.reduce();

       return frac;

   }

   // This method is used to subtract two Fractions
   public Fraction subtract(Fraction f) {
       int a = this.numer;
       int b = this.denom;
       int c = f.numer;
       int d = f.denom;
       int num = (a * d - b * c);
       int den = (b * d);
       Fraction frac = new Fraction(num, den);
       frac.reduce();
       return frac;
   }

   // This method is used to multiply two Fractions
   public Fraction multiply(Fraction f) {
       int a = this.numer;
       int b = this.denom;
       int c = f.numer;
       int d = f.denom;
       int num = (a * c);
       int den = (b * d);
       Fraction frac = new Fraction(num, den);
       frac.reduce();
       return frac;

   }

   // This method is used to Divide two Fractions
   public Fraction divide(Fraction f) {
       int a = this.numer;
       int b = this.denom;
       int c = f.numer;
       int d = f.denom;
       int num = (a * d);
       int den = (c * b);
       Fraction frac = new Fraction(num, den);
       frac.reduce();
       return frac;
   }

   // This method is used to find the reciprocal of a Fraction
   public Fraction reciprocal() {
       Fraction Frac = new Fraction(denom, numer);
       reduce();
       return Frac;
   }

   /**
   * compareTo method for fraction class that compares old num and den to new
   * num and den.
   */
   public int compareTo(Fraction a) {
       int result = 0;
       double frac1 = this.numer / this.denom;
       double frac2 = a.numer / a.denom;

       if (frac1 < frac2) {
           result = 1;
       }

       else if (frac1 > frac2) {
           result = -1;
       } else {
           return 0;
       }
       return result;
   }
}

______________________

Driver.java

import java.util.*;
import java.io.*;
public class Driver
{
public static void main(String[] args)
{
// local variables
int num;
int dem;
int num2;
int dem2;
// scanner object
Scanner keyboard = new Scanner(System.in);
// stores first num
System.out.println("Enter the first numerator: ");
num = keyboard.nextInt();
  
// stores first den
System.out.println("Enter the first denominator: ");
dem = keyboard.nextInt();
  
// stores second num
System.out.println("Enter the second numerator: ");
num2 = keyboard.nextInt();
  
// stores second dem
System.out.println("Enter the second denominator: ");
dem2 = keyboard.nextInt();
  
//created fraction object to store all data
Fraction a = new Fraction(num, dem);
Fraction b = new Fraction(num2, dem2);
  
// using add, subtract, multiply, and divide methods from fraction class to calcuate answers.
System.out.println("Addition: " + a.add(b));
System.out.println("Subtraction: " + a.subtract(b));
System.out.println("Multiplication: " + a.multiply(b));
System.out.println("Division: " + a.divide(b));
int res=a.compareTo(b);

if(res==1)
   System.out.println(a.toString()+ " is less than "+b.toString() );
else if(res==-1)
   System.out.println(a.toString()+ "is greater than "+b.toString() );
else
   System.out.println(a.toString()+ "is equal to "+b.toString() );
}
}//end of main

______________________

Output:

Enter the first numerator:
12
Enter the first denominator:
13
Enter the second numerator:
24
Enter the second denominator:
15
Addition: 164/65
Subtraction: -44/65
Multiplication: 96/65
Division: 15/26
12/13 is less than 8/5

__________Thank You

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote