Files
HW-03-oop-and-api-Ramtin/src/main/java/Rational/Rational.java
T

120 lines
3.4 KiB
Java

package Rational;
public class Rational {
private int numerator;
private int denominator;
// Constructor
public Rational(int numerator, int denominator) {
if (denominator == 0) {
throw new IllegalArgumentException("Denominator cannot be zero");
}
this.numerator = numerator;
this.denominator = denominator;
simplify();
}
// GCD helper for simplification
private int gcd(int a, int b) {
a = Math.abs(a);
b = Math.abs(b);
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
// Simplify the fraction
private void simplify() {
int gcd = gcd(numerator, denominator);
numerator /= gcd;
denominator /= gcd;
// Keep denominator positive
if (denominator < 0) {
numerator = -numerator;
denominator = -denominator;
}
}
// COMPLETED - Instance method: this + other
public Rational add(Rational other) {
int newNumerator = this.numerator * other.denominator + other.numerator * this.denominator;
int newDenominator = this.denominator * other.denominator;
return new Rational(newNumerator, newDenominator);
}
// COMPLETED - Static method: r1 + r2
public static Rational add(Rational r1, Rational r2) {
return r1.add(r2);
}
// COMPLETED - Instance method - this - other
public Rational subtract(Rational other) {
int newNumerator = (this.numerator * other.denominator - other.numerator * this.denominator);
int newDenominator = this.denominator * other.denominator;
Rational result = new Rational(newNumerator, newDenominator);
result.simplify();
return result;
}
// COMPLETED - Static method - r1 - r2
public static Rational subtract(Rational r1, Rational r2) {
return r1.subtract(r2);
}
// COMPLETED - Instance method - this * other
public Rational multiply(Rational other) {
int newNumerator = this.numerator * other.numerator;
int newDenominator = this.denominator * other.denominator;
Rational result = new Rational(newNumerator, newDenominator);
result.simplify();
return result;
}
// COMPLETED - Static method - r1 * r2
public static Rational multiply(Rational r1, Rational r2) {
return r1.multiply(r2);
}
// COMPLETED - Instance method - this / other
public Rational divide(Rational other) {
if (other.numerator == 0) {
throw new ArithmeticException("Invalid division. Denominator will be zero");
}
int newNumerator = this.numerator * other.denominator;
int newDenominator = this.denominator * other.numerator;
Rational result = new Rational(newNumerator, newDenominator);
result.simplify();
return result;
}
// COMPLETED - Static method - r1 / r2
public static Rational divide(Rational r1, Rational r2) {
return r1.divide(r2);
}
// PROVIDED - String representation
@Override
public String toString() {
if (denominator == 1) {
return numerator + "";
}
return numerator + "/" + denominator;
}
// PROVIDED - Decimal value
public double toDouble() {
return (double) numerator / denominator;
}
}