From 33ab7ceb3547d12539c54295818741d800a513f2 Mon Sep 17 00:00:00 2001 From: CjohnsonEDM Date: Fri, 1 Nov 2024 14:44:14 -0400 Subject: [PATCH] I added error handling for division by zero --- .../algorithms/mathematics/Division.java | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/com/jwetherell/algorithms/mathematics/Division.java b/src/com/jwetherell/algorithms/mathematics/Division.java index c133f741..813637f5 100644 --- a/src/com/jwetherell/algorithms/mathematics/Division.java +++ b/src/com/jwetherell/algorithms/mathematics/Division.java @@ -3,11 +3,18 @@ public class Division { public static final long division(int a, int b) { + if (b == 0) { + throw new IllegalArgumentException("Divisor cannot be zero."); + } long result = ((long) a) / ((long) b); return result; } public static final long divisionUsingLoop(int a, int b) { + if (b == 0) { + throw new IllegalArgumentException("Divisor cannot be zero."); + } + int absA = Math.abs(a); int absB = Math.abs(b); @@ -22,6 +29,10 @@ public static final long divisionUsingLoop(int a, int b) { } public static final long divisionUsingRecursion(int a, int b) { + if (b == 0) { + throw new IllegalArgumentException("Divisor cannot be zero."); + } + int absA = Math.abs(a); int absB = Math.abs(b); @@ -38,6 +49,10 @@ public static final long divisionUsingRecursion(int a, int b) { } public static final long divisionUsingMultiplication(int a, int b) { + if (b == 0) { + throw new IllegalArgumentException("Divisor cannot be zero."); + } + int absA = Math.abs(a); int absB = Math.abs(b); @@ -55,27 +70,34 @@ public static final long divisionUsingMultiplication(int a, int b) { } public static final long divisionUsingShift(int a, int b) { + if (b == 0) { + throw new IllegalArgumentException("Divisor cannot be zero."); + } + int absA = Math.abs(a); int absB = Math.abs(b); int tempA, tempB, counter; long result = 0L; while (absA >= absB) { - tempA = absA >> 1; // Right shift "a" + tempA = absA >> 1; tempB = absB; counter = 1; - while (tempA >= tempB) { // Double "tempB" until it's larger than - // "tempA" + while (tempA >= tempB) { tempB <<= 1; - counter <<= 1; // Double the counter + counter <<= 1; } - absA -= tempB; // Subtract "tempB" from "a" - result += counter; // Add counter (2^number of left shifts) + absA -= tempB; + result += counter; } return (a > 0 && b > 0 || a < 0 && b < 0) ? result : -result; } public static final long divisionUsingLogs(int a, int b) { + if (b == 0) { + throw new IllegalArgumentException("Divisor cannot be zero."); + } + long absA = Math.abs(a); long absB = Math.abs(b); double logBase10A = Math.log10(absA);