From 27bd94de45933baca4a010dac8db39348397a75e Mon Sep 17 00:00:00 2001 From: Sofia-Rimando Date: Fri, 1 Nov 2024 15:14:09 -0400 Subject: [PATCH] Quiz 2. Update division functionality to include error handling for division by 0. --- .project | 11 ++ .../algorithms/mathematics/Division.class | Bin 0 -> 1776 bytes .../algorithms/mathematics/Division.java | 126 +++++++++++------- 3 files changed, 90 insertions(+), 47 deletions(-) create mode 100644 src/com/jwetherell/algorithms/mathematics/Division.class diff --git a/.project b/.project index 3cd55b5c..86e73f4a 100644 --- a/.project +++ b/.project @@ -14,4 +14,15 @@ org.eclipse.jdt.core.javanature + + + 1730486790075 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/src/com/jwetherell/algorithms/mathematics/Division.class b/src/com/jwetherell/algorithms/mathematics/Division.class new file mode 100644 index 0000000000000000000000000000000000000000..9f83cecfbaad933f39a2be261ca157b323af0af4 GIT binary patch literal 1776 zcmZ{l-BTM?7{;G%&h925e5LG)`DjxF8lWY#P$F0mT14r9RjF9i(b**1u(-)$K3c|W zGtPL^8?Tghrqc_qaP-0{qceK%jMx4JUh0guPBA{agpbIOojH5Xd(NJHe(!VM&9DFd z_%nbst_9J7^C}X4TnOR}dV+Wfy+O32PnqEg_veQC-Oxq1msDnYkKzL=22~76P_A1= zt1>OYmmFA;AZ|K2Q$qWqRW#qM7BXh(j*+n$@#n1jR@rij66EB7gkhvYcoBLCBe)Vm#O+$pc2ihcb94We;SvRvp(~^rv!R1Pc`Fq8+qwOfV#J%W} zks-B6E(|Piu;Dy#?UfRO$^GFy+i^;`K>s^D-&HV$2(vxQah!LFcX{v` zr0?00(8X5qfE?Z7wX_JN6_-%r zIT~X^rWkSchN14ETaxym2oYCRal_S4{~P)Ef!bBBTRlyCFfC&7+_<7Cj}g)o@sy&( zj;3ru4(#YcQ{uZ&jI=l*U%2wcG5J@SLZFxO`zZe+?Ku<;lFp zc7`C$2%3!fzQ(aKq z-WR(FJWMNbu4~nm7{Od?PJo^8Ws)es1i>Z=cAcXsg3SInZQZv%(cKx>#e5z}ldd#?KmK|`Ld~cC&nS6K1_a6D~(zsRH z`97`ufChfZPsvAk86T6}AZ-S3Bj+(rBH%IBSzmsMKkmpntaEE`$Ownp;dp=gAP=#_ zJbcHBbhCZe%|mV0EjAWcbGaqH+(pX-51)7Uvvj+aZhxNcP6WGyyJ&lu4xOM5xzwR! z)csz*ExvCZt*}{l1rl$d2cOc-692c#coh|oE&_QEQ6cKg0da)z`FzCjj;h3JbiXR+ F{sW=+IRyX! literal 0 HcmV?d00001 diff --git a/src/com/jwetherell/algorithms/mathematics/Division.java b/src/com/jwetherell/algorithms/mathematics/Division.java index c133f741..397e7bbe 100644 --- a/src/com/jwetherell/algorithms/mathematics/Division.java +++ b/src/com/jwetherell/algorithms/mathematics/Division.java @@ -4,54 +4,75 @@ public class Division { public static final long division(int a, int b) { long result = ((long) a) / ((long) b); + + if (b == 0) { + throw new IllegalArgumentException ("Divisor cannot be 0"); + } + else { return result; + } } public static final long divisionUsingLoop(int a, int b) { int absA = Math.abs(a); int absB = Math.abs(b); - long temp = absA; - long result = 0; - while (temp >= 0) { - temp -= absB; - if (temp >= 0) - result++; - } - return (a > 0 && b > 0 || a < 0 && b < 0) ? result : -result; + if (b == 0) { + throw new IllegalArgumentException ("Divisor cannot be 0"); + } + else { + long temp = absA; + long result = 0; + while (temp >= 0) { + temp -= absB; + if (temp >= 0) + result++; + } + return (a > 0 && b > 0 || a < 0 && b < 0) ? result : -result; + } } public static final long divisionUsingRecursion(int a, int b) { int absA = Math.abs(a); int absB = Math.abs(b); - long result = 1; - int diff = absA - absB; - if (diff > 0 && diff <= 1) { - return result; - } else if (diff < 0) { - return 0; - } + if (b == 0) { + throw new IllegalArgumentException ("Divisor cannot be 0"); + } + else { + long result = 1; + int diff = absA - absB; + if (diff > 0 && diff <= 1) { + return result; + } else if (diff < 0) { + return 0; + } - result += divisionUsingRecursion(diff, absB); - return (a > 0 && b > 0 || a < 0 && b < 0) ? result : -result; + result += divisionUsingRecursion(diff, absB); + return (a > 0 && b > 0 || a < 0 && b < 0) ? result : -result; + } } public static final long divisionUsingMultiplication(int a, int b) { int absA = Math.abs(a); int absB = Math.abs(b); - int temp = absB; - int counter = 0; - while (temp <= absA) { - temp = temp << 1; - counter++; - } - absA -= absB << (counter - 1); - long result = (long) Math.pow(2, counter - 1); - if (absB <= absA) - result += divisionUsingMultiplication(absA, absB); - return (a > 0 && b > 0 || a < 0 && b < 0) ? result : -result; + if (b == 0) { + throw new IllegalArgumentException ("Divisor cannot be 0"); + } + else { + int temp = absB; + int counter = 0; + while (temp <= absA) { + temp = temp << 1; + counter++; + } + absA -= absB << (counter - 1); + long result = (long) Math.pow(2, counter - 1); + if (absB <= absA) + result += divisionUsingMultiplication(absA, absB); + return (a > 0 && b > 0 || a < 0 && b < 0) ? result : -result; + } } public static final long divisionUsingShift(int a, int b) { @@ -59,29 +80,40 @@ public static final long divisionUsingShift(int a, int b) { int absB = Math.abs(b); int tempA, tempB, counter; - long result = 0L; - while (absA >= absB) { - tempA = absA >> 1; // Right shift "a" - tempB = absB; - counter = 1; - while (tempA >= tempB) { // Double "tempB" until it's larger than - // "tempA" - tempB <<= 1; - counter <<= 1; // Double the counter - } - absA -= tempB; // Subtract "tempB" from "a" - result += counter; // Add counter (2^number of left shifts) - } - return (a > 0 && b > 0 || a < 0 && b < 0) ? result : -result; + if (b == 0) { + throw new IllegalArgumentException ("Divisor cannot be 0"); + } + else { + long result = 0L; + while (absA >= absB) { + tempA = absA >> 1; // Right shift "a" + tempB = absB; + counter = 1; + while (tempA >= tempB) { // Double "tempB" until it's larger than + // "tempA" + tempB <<= 1; + counter <<= 1; // Double the counter + } + absA -= tempB; // Subtract "tempB" from "a" + result += counter; // Add counter (2^number of left shifts) + } + return (a > 0 && b > 0 || a < 0 && b < 0) ? result : -result; + } } public static final long divisionUsingLogs(int a, int b) { long absA = Math.abs(a); long absB = Math.abs(b); - double logBase10A = Math.log10(absA); - double logBase10B = Math.log10(absB); - double powOf10 = Math.pow(10, (logBase10A - logBase10B)); - long result = (long) Math.floor(powOf10); - return (a > 0 && b > 0 || a < 0 && b < 0) ? result : -result; + + if (b == 0) { + throw new IllegalArgumentException ("Divisor cannot be 0"); + } + else { + double logBase10A = Math.log10(absA); + double logBase10B = Math.log10(absB); + double powOf10 = Math.pow(10, (logBase10A - logBase10B)); + long result = (long) Math.floor(powOf10); + return (a > 0 && b > 0 || a < 0 && b < 0) ? result : -result; + } } }