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