AVA Write a program that works with fractions I have part of
AVA :Write a program that works with fractions.
I have part of the template below.
Solution
ackage com.gigal.fractionexercise.app;
import java.util.Scanner;
import com.gigal.fractionexercise.helper.Messages;
import com.gigal.fractionexercise.model.Division;
import com.gigal.fractionexercise.model.Fraction;
import com.gigal.fractionexercise.model.Multiplication;
import com.gigal.fractionexercise.model.Subtraction;
import com.gigal.fractionexercise.model.Addition;
public class FractionsApp {
private static Scanner keyboard = new Scanner(System.in);
public static void main(String args[]) {
Fraction fraction1 = new Fraction(); // first fraction
Fraction fraction2 = new Fraction(); // second fraction
// Display application header
Messages.displayHeader();
// get user inputs for fraction one and validate them
do {
System.out.println(\"Enter values for fration one\");
Messages.insertNumerator();
try {
fraction1.setNumerator(keyboard.nextInt()); // get user input
} catch (Exception e) {
Messages.inputError(e); // display error
return;
}
Messages.inputDenominator();
try {
fraction1.setDenominator(keyboard.nextInt()); // get user input
} catch (Exception e) {
Messages.inputError(e);
return;
}
if (fraction1.getDenominator() == 0) { // check for x/0 error
Messages.DenominatorCannotBeZero();
}
} while (fraction1.getDenominator() == 0);
// Display fraction one
System.out.print(\"Fraction one : \");
fraction1.display();
Messages.newLine();
// get user inputs for fraction two and validate them
do {
System.out.println(\"Enter values for fration two\");
Messages.insertNumerator();
try {
fraction2.setNumerator(keyboard.nextInt()); // get user input
} catch (Exception e) {
Messages.inputError(e);
return;
}
Messages.inputDenominator();
try {
fraction2.setDenominator(keyboard.nextInt()); // get user input
} catch (Exception e) {
Messages.inputError(e);
return;
}
if (fraction2.getDenominator() == 0) { // check for x/0 error
Messages.DenominatorCannotBeZero();
}
} while (fraction2.getDenominator() == 0);
// Display fraction two
System.out.print(\"Fraction two : \");
fraction2.display();
Messages.newLine();
// Addition
Addition addition = new Addition(fraction1, fraction2);
addition.display();
// Subtraction
Subtraction subtraction = new Subtraction(fraction1, fraction2);
subtraction.display();
// Multiplication
Multiplication multiplication = new Multiplication(fraction1, fraction2);
multiplication.display();
// Division
Division division = new Division(fraction1, fraction2);
division.display();
// Display application footer
Messages.displayFooter();
}
}
Messages.java
package com.gigal.fractionexercise.helper;
import com.gigal.fractionexercise.model.Fraction;
/*
* This class is used to give meaningful messages to user
* So whenever we want to change a message we don\'t want to check whole app but this class
*/
public class Messages {
// This message is use to display the program header
public static void displayHeader() {
System.out.println(\"_________________________________________________________\");
System.out.println(\" Fraction App - a Gigal Blog Production\");
System.out.println(\"_________________________________________________________\");
newLine();
}
// This message is use to display the program footer
public static void displayFooter() {
newLine();
System.out.println(\" ----------- Thank you for using Fraction App -----------\");
System.out.println(\"_________________________________________________________\");
newLine();
}
// This message is use to tell user to input value for Numerator in a fraction
public static void insertNumerator() {
System.out.print(\"Numerator : \");
}
// This message is use to tell user to input a value for denominator
public static void inputDenominator() {
System.out.print(\"Denominator : \");
}
/ This method is used to get line of space
public static void newLine() {
System.out.println(\"\ \");
}
// This message is used when user input something miss match
public static void inputError(Exception e) {
newLine();
System.out.println(\"Input Error: \" + e.toString());
System.out.println(\"Closing application ...\");
System.out.println(\"Fraction app is closed.\");
displayFooter();
}
// This message is used when user input 0 for Denominator in a fraction
public static void DenominatorCannotBeZero() {
System.out.println(\"Input Error: Denominator Cannot be zero\");
newLine();
}
// This message is used to display answers
public static void displayAnswer(String operation, String operator,
Fraction fraction1, Fraction fraction2, Fraction answer) {
System.out.print(operation + \" : \");
fraction1.display();
System.out.print(\" \" + operator + \" \");
fraction2.display();
System.out.print(\" = \");
answer.display();
newLine();
}
}
Addition.java
package com.gigal.fractionexercise.model;
/*
* This class models addition
*/
import com.gigal.fractionexercise.helper.Messages;
public class Addition {
private Fraction fraction1;
private Fraction fraction2;
private Fraction answer;
// Constructor
public Addition(Fraction fraction1, Fraction fraction2) {
this.fraction1 = fraction1;
this.fraction2 = fraction2;
this.answer = new Fraction();
Calculate();
}
// perform the calculation
public void Calculate() {
answer.setNumerator((fraction1.getNumerator() * fraction2.getDenominator())
+ (fraction2.getNumerator() * fraction1.getDenominator()));
answer.setDenominator(fraction1.getDenominator() * fraction2.getDenominator());
}
// display the answer
public void display() {
Messages.displayAnswer(\"Addition\", \"+\", fraction1, fraction2, answer);
}
}
Division.java
package com.gigal.fractionexercise.model;
/*
* This class models division
*/
import com.gigal.fractionexercise.helper.Messages;
public class Division {
private Fraction fraction1;
private Fraction fraction2;
private Fraction answer;
// Constructor
public Division(Fraction fraction1, Fraction fraction2) {
this.fraction1 = fraction1;
this.fraction2 = fraction2;
this.answer = new Fraction();
Calculate();
}
// perform the calculation
public void Calculate() {
answer.setNumerator(fraction1.getNumerator() * fraction2.getDenominator());
answer.setDenominator(fraction1.getDenominator() * fraction2.getNumerator());
}
public void display() {
// Check for the divide by zero error
if (fraction2.getNumerator() == 0) {
System.out.println(\"Division : Cannot divide by zero!\");
return;
} else {
// display the answer
Messages.displayAnswer(\"Division\", \"/\", fraction1, fraction2,
answer);
}
}
}
Fraction.java
package com.gigal.fractionexercise.model;
/*
* This class models the fraction
*/
public class Fraction {
private int Numerator; // x
private int Denominator; // y
public int getNumerator() {
return Numerator;
}
public void setNumerator(int Numerator) {
this.Numerator = Numerator;
}
public int getDenominator() {
return Denominator;
}
public void setDenominator(int Denominator) {
this.Denominator = Denominator;
}
// This method is used to display fractions
// Some kind of processing also
public void display() {
// 0/y and x/1 types
if (Numerator == 0 || Denominator == 1) {
System.out.print(Numerator);
}
// -x/-y and x/-y types
else {
if ((Numerator < 0 && Denominator < 0) || (Numerator > 0 && Denominator < 0)) {
Numerator *= -1;
Denominator *= -1;
}
// x/x type
if (Numerator == Denominator) {
System.out.print(Numerator);
return;
}
System.out.print(this.Numerator + \"/\" + this.Denominator);
}
}
}
Multiplication.java
package com.gigal.fractionexercise.model;
/*
* This class models multiplication
*/
import com.gigal.fractionexercise.helper.Messages;
public class Multiplication {
private Fraction fraction1;
private Fraction fraction2;
private Fraction answer;
// Constructor
public Multiplication(Fraction fraction1, Fraction fraction2) {
this.fraction1 = fraction1;
this.fraction2 = fraction2;
this.answer = new Fraction();
Calculate();
}
// perform the calculation
public void Calculate() {
answer.setNumerator(fraction1.getNumerator() * fraction2.getNumerator());
answer.setDenominator(fraction1.getDenominator() * fraction2.getDenominator());
}
// display the answer
public void display() {
Messages.displayAnswer(\"Multiplication\", \"*\", fraction1, fraction2, answer);
}
}
Subtraction.java
package com.gigal.fractionexercise.model;
/*
* This class models subtraction
*/
import com.gigal.fractionexercise.helper.Messages;
public class Subtraction {
private Fraction fraction1;
private Fraction fraction2;
private Fraction answer;
// Constructor
public Subtraction(Fraction fraction1, Fraction fraction2) {
this.fraction1 = fraction1;
this.fraction2 = fraction2;
this.answer = new Fraction();
Calculate();
}
// perform the calculation
public void Calculate() {
answer.setNumerator((fraction1.getNumerator() * fraction2.getDenominator()) - (fraction2.getNumerator() * fraction1.getDenominator()));
answer.setDenominator(fraction1.getDenominator() * fraction2.getDenominator());
}
// display the answer
public void display() {
Messages.displayAnswer(\"Subtraction\", \"-\", fraction1, fraction2, answer);
}
}







