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

I am writing a code to solve the problem below. However, the code I have written

ID: 3572531 • Letter: I

Question

I am writing a code to solve the problem below. However, the code I have written which is also below tells me that I have an error for my simplifyFraction() method. I put where the problem is in bold. Please tell me how I can fix it. Thank you!

Problem:

Programming Assignment 9
In this assignment you are to write a program to solve the following problem.
It is your responsibility to thoroughly test your code.

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 data fields that should be private: the numerator and the denominator of the fraction. The class also must have the following public class methods:
•   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.

You will also have to write a program to test your Fraction class. The following output is an example run:
== F1 ==
Enter numerator: 1
Enter denominator: 2
== F2 ==
Enter numerator: 3
Enter denominator: 5

F1: 1/2 (0.500)
F2: 3/5 (0.600)
F1+F1: 1
F2+F2: 6/5 (1.200)
F1+F2: 11/10 (1.100)
F2+F1: 11/10 (1.100)
F1-F1: 0
F2-F2: 0
F1-F2: -1/10 (-0.100)
F2-F1: 1/10 (0.100)
F1*F1: 1/4 (0.250)
F2*F2: 9/25 (0.360)
F1*F2: 3/10 (0.300)
F2*F1: 3/10 (0.300)
F1/F1: 1
F2/F2: 1
F1/F2: 5/6 (0.833)
F2/F1: 6/5 (1.200)
F1*F1-F2: -7/20 (-0.350)

The program should use the Scanner constructor, the plus/minus/times/divides methods (as opposed to directly computing the outputs), and implicitly the toString method.

My code:

import java.util.Scanner;

public class Fraction {
  
   private int numerator;
   private int denominator;

   private static final String E_DEN_ZERO = "Denominator cannot be zero.";
   private static final String E_DIV_ZERO = "Cannot divide by zero.";
  
   private static int gcd(int num1, int num2) {
       int t;
       while (num2 != 0) {
           t = num2;
           num2 = num1 % num2;
           num1 = t;
       }
      
       return num1;
   }
  
   private static int[] simplifyFraction(int[] f) {
       final int gcd = gcd(f[0], f[1]);
       int[] result = {f[0]/gcd, f[1]/gcd};
      
       if ((result[0]<0 && result[1]<0) || (result[1]<0)) {
           result[0] = -result[0];
           result[1] = -result[1];
       }
      
       return result;
   }
  
   public Fraction(int n, int d) {
       if (d == 0){
           System.out.println("The denominator cannot be equal to zero.");
           System.exit(0);
       }
       setFraction(n, d);
      
   }
  
   private void setFraction(int num, int den) {
   if (den == 0)
   throw new ArithmeticException();
   if(den < 0){
   if(num < 0){
   den *= -1;
   num *= -1;
   }
   else{
   den *= -1;
   num *= -1;
   }
   }
   numerator = num;
   denominator = den;
   }
  
   public Fraction() {
       numerator = 0;
       denominator = 1;
   }
  
   public Fraction(Scanner s){
       System.out.print("Enter the numerator: ");
       numerator = s.nextInt();
       System.out.print("Enter the denominator: ");
       denominator = s.nextInt();
       if (denominator == 0){
           System.out.println("The denominator cannot be equal to zero.");
           System.exit(0);
       }
   }
      
   public double toDecimal() {
       return numerator / denominator;
   }
  
   public String toString() {
       if (denominator == 1){
           return "numerator";  
       }
       else {
           return String.format("%d%.3f", numerator / denominator );   
       }
   }
  
   public int getNumerator() {
       return numerator;
   }
  
   public int getDenominator() {
       return denominator;
   }
  
   public Fraction plus(Fraction f) {
   Fraction newone = new Fraction((numerator * ((Fraction) f).denominator)
   + (denominator * ((Fraction) f).numerator),
   denominator * ((Fraction) f).denominator);
   newone.simplifyFraction();
   return newone;
   }

   public Fraction minus(Fraction f) {
   Fraction newone = new Fraction((numerator * ((Fraction) f).denominator)
   - (denominator * ((Fraction) f).numerator),
   denominator * ((Fraction) f).denominator);
   newone.simplifyFraction(int[] f);
   return newone;
   }

   public Fraction times(Fraction f) {
   Fraction newone = new Fraction((numerator * ((Fraction) f).numerator),
   denominator * ((Fraction) f).denominator);
   newone.simplifyFraction(int[] f);
   return newone;
   }

   public Fraction divides(Fraction f) {
   Fraction newone = new Fraction((numerator * ((Fraction) f).denominator),
   denominator * ((Fraction) f).numerator);
   newone.simplifyFraction(int[] f);
   return newone;
   }
  
}

import java.util.Scanner;
public class PA9a {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Fraction F1 = new Fraction(in);
Fraction F2 = new Fraction(in);
System.out.println("F1: " + F1);
System.out.println("F2: " + F2);
System.out.println("F1 + F1: " + F1.plus(F1));
System.out.println("F2 + F2: " + F2.plus(F2));
System.out.println("F1 + F2: " + F1.plus(F2));
System.out.println("F2 + F1: " + F2.plus(F1));
System.out.println("F1 - F1: " + F1.minus(F1));
System.out.println("F2 - F2: " + F2.minus(F2));
System.out.println("F1 - F2: " + F1.minus(F2));
System.out.println("F2 - F1: " + F2.minus(F1));
System.out.println("F1 * F1: " + F1.times(F1));
System.out.println("F2 * F2: " + F2.times(F2));
System.out.println("F1 * F2: " + F1.times(F2));
System.out.println("F2 * F1: " + F2.times(F1));
System.out.println("F1 / F1: " + F1.divides(F1));
System.out.println("F2 / F2: " + F2.divides(F2));
System.out.println("F1 / F2: " + F1.divides(F2));
System.out.println("F2 / F1: " + F2.divides(F1));
System.out.println("F1 * F1 - F2: " + F1.times(F1).minus(F2));
}
  
}

Explanation / Answer

"private static int[] simplifyFraction(int[] f)" method is expecting as array of int type as an argument.

correct way to this method is as below:

int[] arr = new int[5];

newone.simplifyFraction(arr);

this is just for example. you can use this in your code as per your business requirement.

here 5 is the size array. you can initialize the array with size you need.

please let me know if you need any clarification.

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