From 1b6c651a2875d506482fceb954ff808f3d135078 Mon Sep 17 00:00:00 2001 From: alxkm Date: Sat, 17 Aug 2024 11:54:15 +0200 Subject: [PATCH 1/3] refactor: BinaryToOctal --- .../conversions/BinaryToOctal.java | 49 +++++++++---------- .../conversions/BinaryToOctalTest.java | 11 +++-- 2 files changed, 28 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/thealgorithms/conversions/BinaryToOctal.java b/src/main/java/com/thealgorithms/conversions/BinaryToOctal.java index 6fef090287ab..1cd36a851743 100644 --- a/src/main/java/com/thealgorithms/conversions/BinaryToOctal.java +++ b/src/main/java/com/thealgorithms/conversions/BinaryToOctal.java @@ -1,27 +1,16 @@ package com.thealgorithms.conversions; -import java.util.Scanner; - /** * Converts any Binary number to an Octal Number * * @author Zachary Jones */ public final class BinaryToOctal { - private BinaryToOctal() { - } + private static final int BITS_IN_GROUP = 3; + private static final int BINARY_BASE = 2; + private static final int DECIMAL_BASE = 10; - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - System.out.println("Input the binary number: "); - int b = sc.nextInt(); - System.out.println("Octal equivalent: " + convertBinaryToOctal(b)); - sc.close(); + private BinaryToOctal() { } /** @@ -31,20 +20,26 @@ public static void main(String[] args) { * @return The octal number */ public static String convertBinaryToOctal(int binary) { - String octal = ""; - int currBit = 0; - int j = 1; + if (binary == 0) { + return "0"; + } + + StringBuilder octal = new StringBuilder(); + int currentBit; + int bitValueMultiplier = 1; + while (binary != 0) { - int code3 = 0; - for (int i = 0; i < 3; i++) { - currBit = binary % 10; - binary = binary / 10; - code3 += currBit * j; - j *= 2; + int octalDigit = 0; + for (int i = 0; i < BITS_IN_GROUP && binary != 0; i++) { + currentBit = binary % DECIMAL_BASE; + binary /= DECIMAL_BASE; + octalDigit += currentBit * bitValueMultiplier; + bitValueMultiplier *= BINARY_BASE; } - octal = code3 + octal; - j = 1; + octal.insert(0, octalDigit); + bitValueMultiplier = 1; // Reset multiplier for the next group } - return octal; + + return octal.toString(); } } diff --git a/src/test/java/com/thealgorithms/conversions/BinaryToOctalTest.java b/src/test/java/com/thealgorithms/conversions/BinaryToOctalTest.java index c7018daecf23..20973e90844b 100644 --- a/src/test/java/com/thealgorithms/conversions/BinaryToOctalTest.java +++ b/src/test/java/com/thealgorithms/conversions/BinaryToOctalTest.java @@ -2,13 +2,14 @@ import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; public class BinaryToOctalTest { - @Test - public void testBinaryToOctal() { - assertEquals("226", BinaryToOctal.convertBinaryToOctal(10010110)); - assertEquals("135", BinaryToOctal.convertBinaryToOctal(1011101)); + @ParameterizedTest + @CsvSource({"0, 0", "1, 1", "10, 2", "111, 7", "1000, 10", "1111, 17", "110101, 65", "1010101, 125", "110110011, 663", "111111111, 777", "10010110, 226", "1011101, 135"}) + void testConvertBinaryToOctal(int binary, String expectedOctal) { + assertEquals(expectedOctal, BinaryToOctal.convertBinaryToOctal(binary)); } } From 7f9b21408dbb0a16df74ed4cf1d3fd38e04b2e9d Mon Sep 17 00:00:00 2001 From: alxkm Date: Sat, 17 Aug 2024 11:59:15 +0200 Subject: [PATCH 2/3] checkstyle: fix formatting --- src/main/java/com/thealgorithms/conversions/BinaryToOctal.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/conversions/BinaryToOctal.java b/src/main/java/com/thealgorithms/conversions/BinaryToOctal.java index 1cd36a851743..33ce98777604 100644 --- a/src/main/java/com/thealgorithms/conversions/BinaryToOctal.java +++ b/src/main/java/com/thealgorithms/conversions/BinaryToOctal.java @@ -37,7 +37,7 @@ public static String convertBinaryToOctal(int binary) { bitValueMultiplier *= BINARY_BASE; } octal.insert(0, octalDigit); - bitValueMultiplier = 1; // Reset multiplier for the next group + bitValueMultiplier = 1; // Reset multiplier for the next group } return octal.toString(); From ccccbfe5eb192130e53b0f4070b52e5493e12390 Mon Sep 17 00:00:00 2001 From: alxkm Date: Sat, 17 Aug 2024 16:58:42 +0200 Subject: [PATCH 3/3] refactor: adding input correctness case, cover by tests. Renaming variable --- .../thealgorithms/conversions/BinaryToOctal.java | 14 +++++++------- .../conversions/BinaryToOctalTest.java | 9 +++++++++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/thealgorithms/conversions/BinaryToOctal.java b/src/main/java/com/thealgorithms/conversions/BinaryToOctal.java index 33ce98777604..5407c8525a23 100644 --- a/src/main/java/com/thealgorithms/conversions/BinaryToOctal.java +++ b/src/main/java/com/thealgorithms/conversions/BinaryToOctal.java @@ -1,12 +1,7 @@ package com.thealgorithms.conversions; -/** - * Converts any Binary number to an Octal Number - * - * @author Zachary Jones - */ public final class BinaryToOctal { - private static final int BITS_IN_GROUP = 3; + private static final int BITS_PER_OCTAL_DIGIT = 3; private static final int BINARY_BASE = 2; private static final int DECIMAL_BASE = 10; @@ -18,19 +13,24 @@ private BinaryToOctal() { * * @param binary The binary number * @return The octal number + * @throws IllegalArgumentException if the input is not a valid binary number */ public static String convertBinaryToOctal(int binary) { if (binary == 0) { return "0"; } + if (!String.valueOf(binary).matches("[01]+")) { + throw new IllegalArgumentException("Input is not a valid binary number."); + } + StringBuilder octal = new StringBuilder(); int currentBit; int bitValueMultiplier = 1; while (binary != 0) { int octalDigit = 0; - for (int i = 0; i < BITS_IN_GROUP && binary != 0; i++) { + for (int i = 0; i < BITS_PER_OCTAL_DIGIT && binary != 0; i++) { currentBit = binary % DECIMAL_BASE; binary /= DECIMAL_BASE; octalDigit += currentBit * bitValueMultiplier; diff --git a/src/test/java/com/thealgorithms/conversions/BinaryToOctalTest.java b/src/test/java/com/thealgorithms/conversions/BinaryToOctalTest.java index 20973e90844b..98bd55a3d6c9 100644 --- a/src/test/java/com/thealgorithms/conversions/BinaryToOctalTest.java +++ b/src/test/java/com/thealgorithms/conversions/BinaryToOctalTest.java @@ -1,7 +1,9 @@ package com.thealgorithms.conversions; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; @@ -12,4 +14,11 @@ public class BinaryToOctalTest { void testConvertBinaryToOctal(int binary, String expectedOctal) { assertEquals(expectedOctal, BinaryToOctal.convertBinaryToOctal(binary)); } + + @Test + void testIncorrectInput() { + assertThrows(IllegalArgumentException.class, () -> BinaryToOctal.convertBinaryToOctal(1234)); + assertThrows(IllegalArgumentException.class, () -> BinaryToOctal.convertBinaryToOctal(102)); + assertThrows(IllegalArgumentException.class, () -> BinaryToOctal.convertBinaryToOctal(-1010)); + } }