diff --git a/src/main/java/com/thealgorithms/conversions/HexToOct.java b/src/main/java/com/thealgorithms/conversions/HexToOct.java index d3a672d37424..ef696d305ee4 100644 --- a/src/main/java/com/thealgorithms/conversions/HexToOct.java +++ b/src/main/java/com/thealgorithms/conversions/HexToOct.java @@ -14,6 +14,7 @@ private HexToOct() { * * @param hex The Hexadecimal number as a String. * @return The Decimal equivalent as an integer. + * @throws IllegalArgumentException if the string contains a character that is not a hexadecimal digit */ public static int hexToDecimal(String hex) { String hexDigits = "0123456789ABCDEF"; @@ -23,6 +24,9 @@ public static int hexToDecimal(String hex) { for (int i = 0; i < hex.length(); i++) { char hexChar = hex.charAt(i); int digitValue = hexDigits.indexOf(hexChar); + if (digitValue == -1) { + throw new IllegalArgumentException("Invalid hexadecimal digit: " + hexChar); + } decimalValue = 16 * decimalValue + digitValue; } diff --git a/src/test/java/com/thealgorithms/conversions/HexToOctTest.java b/src/test/java/com/thealgorithms/conversions/HexToOctTest.java index b3f94b19b6e6..5793b640316b 100644 --- a/src/test/java/com/thealgorithms/conversions/HexToOctTest.java +++ b/src/test/java/com/thealgorithms/conversions/HexToOctTest.java @@ -1,6 +1,7 @@ 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; @@ -30,4 +31,11 @@ public void testHexToOctal() { assertEquals(0, HexToOct.hexToOctal("0")); assertEquals(7777, HexToOct.hexToOctal("FFF")); } + + @Test + public void testInvalidHexDigitThrows() { + assertThrows(IllegalArgumentException.class, () -> HexToOct.hexToDecimal("1G")); + assertThrows(IllegalArgumentException.class, () -> HexToOct.hexToDecimal("0x1A")); + assertThrows(IllegalArgumentException.class, () -> HexToOct.hexToOctal("Z")); + } }