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
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.