From 0ac8436afa09b39032cf36bc9d9da6d36ee875c1 Mon Sep 17 00:00:00 2001 From: HeshamTB Date: Sun, 30 Aug 2020 18:14:49 +0300 Subject: [PATCH] Fraction: - Fixed StackOverFlow ex - Fraction test - output --- lab-0/FractionTest-output.txt | 26 ++++++++++++++++++++++++++ lab-0/src/Fraction.java | 21 ++++++++++----------- lab-0/src/FractionTest.java | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 11 deletions(-) create mode 100644 lab-0/FractionTest-output.txt create mode 100644 lab-0/src/FractionTest.java diff --git a/lab-0/FractionTest-output.txt b/lab-0/FractionTest-output.txt new file mode 100644 index 0000000..417adf0 --- /dev/null +++ b/lab-0/FractionTest-output.txt @@ -0,0 +1,26 @@ +/usr/lib/jvm/java-11-openjdk/bin/java -javaagent:/usr/share/idea/lib/idea_rt.jar=43413:/usr/share/idea/bin -Dfile.encoding=UTF-8 -classpath /home/hesham/Dev/EE364-lab/lab-0/out/production/lab-0 FractionTest +reducing 2/4 +1/2 +1/2 +0.50 +0.50 +1/2 1/2 are equal? true +multiple: 1/4 +reducing 4/4 +add: 1/1 +subtract: 0/4 +reducing 2/2 +divide: 1/1 +------------------------------------ +6/7 +1/5 +0.86 +0.20 +6/7 1/5 are equal? false +multiple: 6/35 +add: 37/35 +subtract: 23/35 +divide: 30/7 + +Process finished with exit code 0 + diff --git a/lab-0/src/Fraction.java b/lab-0/src/Fraction.java index 8d7e75d..dfffbf1 100644 --- a/lab-0/src/Fraction.java +++ b/lab-0/src/Fraction.java @@ -13,7 +13,8 @@ public class Fraction { //This might get in recursive loop if (isReducible(numerator, denominator)){ - Fraction f = reduce(new Fraction(numerator, denominator)); + System.out.printf("reducing %d/%d\n", numerator, denominator); + Fraction f = reduce(numerator, denominator); this.numerator = f.numerator; this.denominator = f.denominator; } @@ -36,17 +37,14 @@ public class Fraction { /** * Reduces a fraction to it's minimum form - * @param oldFraction The fraction to be reduced. - * @return reduced fraction + * @param numerator + * @param denominator + * @return */ - private Fraction reduce(Fraction oldFraction) { + private Fraction reduce(int numerator, int denominator) { - if (isReducible(oldFraction)){ - int gcd = GCD(oldFraction.numerator, oldFraction.denominator); - return new Fraction(oldFraction.numerator/gcd, - oldFraction.denominator/gcd); - } - else return oldFraction; + int gcd = GCD(numerator, denominator); + return new Fraction(numerator/gcd, denominator/gcd); } @@ -72,7 +70,7 @@ public class Fraction { */ public boolean equal(Fraction fraction){ - Fraction reducedFraction = reduce(fraction); + Fraction reducedFraction = reduce(fraction.numerator, fraction.denominator); if (this.numerator == reducedFraction.numerator && this.denominator == reducedFraction.denominator) return true; return false; @@ -173,6 +171,7 @@ public class Fraction { private boolean isReducible(Fraction fraction){ int gcd = GCD(fraction.numerator, fraction.denominator); + System.out.println("GCD: "+gcd); if (gcd == 1) return false; else return true; diff --git a/lab-0/src/FractionTest.java b/lab-0/src/FractionTest.java new file mode 100644 index 0000000..c06a66b --- /dev/null +++ b/lab-0/src/FractionTest.java @@ -0,0 +1,33 @@ +import java.io.PrintStream; + +public class FractionTest { + public static void main(String args[]){ + + PrintStream out = System.out; + Fraction f1 = new Fraction(1, 2); + Fraction f2 = new Fraction(2, 4); + out.println(f1.toString()); + out.println(f2.toString()); + out.println(f1.decimal(2)); + out.println(f2.decimal(2)); + out.println(f1.toString()+" "+f2.toString()+" are equal? "+ f1.equal(f2)); + out.println("multiple: "+ Fraction.multiply(f1, f2)); + out.println("add: "+ Fraction.add(f1, f2)); + out.println("subtract: "+ Fraction.subtract(f1, f2)); + out.println("divide: "+ Fraction.divide(f1, f2)); + + out.println("------------------------------------"); + Fraction f3 = new Fraction(6,7); + Fraction f4 = new Fraction(1,5); + out.println(f3.toString()); + out.println(f4.toString()); + out.println(f3.decimal(2)); + out.println(f4.decimal(2)); + out.println(f3.toString()+" "+f4.toString()+" are equal? "+ f3.equal(f4)); + out.println("multiple: "+ Fraction.multiply(f3, f4)); + out.println("add: "+ Fraction.add(f3, f4)); + out.println("subtract: "+ Fraction.subtract(f3, f4)); + out.println("divide: "+ Fraction.divide(f3, f4)); + + } +}