From 4bbc4bd69f2a68963ba733df744c6ea356aba109 Mon Sep 17 00:00:00 2001 From: Piotr Idzik <65706193+vil02@users.noreply.github.com> Date: Wed, 31 May 2023 08:07:55 +0200 Subject: [PATCH] Refactor ReverseNumber (#4208) --- .../thealgorithms/maths/ReverseNumber.java | 43 ++++++++++--------- .../maths/ReverseNumberTest.java | 33 ++++++++++++++ 2 files changed, 55 insertions(+), 21 deletions(-) create mode 100644 src/test/java/com/thealgorithms/maths/ReverseNumberTest.java diff --git a/src/main/java/com/thealgorithms/maths/ReverseNumber.java b/src/main/java/com/thealgorithms/maths/ReverseNumber.java index a78c4de82..8c74bfdf2 100644 --- a/src/main/java/com/thealgorithms/maths/ReverseNumber.java +++ b/src/main/java/com/thealgorithms/maths/ReverseNumber.java @@ -1,30 +1,31 @@ package com.thealgorithms.maths; -import java.lang.IllegalStateException; -import java.util.NoSuchElementException; -import java.util.Scanner; +import java.lang.IllegalArgumentException; -public class ReverseNumber { +/** + * @brief utility class reversing numbers + */ +final public class ReverseNumber { + private ReverseNumber() { + } - public static void main(String[] args) { - int number; - int reverse = 0; - - try (Scanner sc = new Scanner(System.in)) { - System.out.println("Enter a number:"); - number = sc.nextInt(); - } catch (NoSuchElementException | IllegalStateException e) { - System.out.println("ERROR: Invalid input"); - return; + /** + * @brief reverses the input number + * @param number the input number + * @exception IllegalArgumentException number is negative + * @return the number created by reversing the order of digits of the input number + */ + public static int reverseNumber(int number) { + if (number < 0) { + throw new IllegalArgumentException("number must be nonnegative."); } - while (number != 0) { - int remainder = number % 10; - - reverse = reverse * 10 + remainder; - number = number / 10; + int result = 0; + while (number > 0) { + result *= 10; + result += number % 10; + number /= 10; } - - System.out.println("The reverse of the given number is: " + reverse); + return result; } } diff --git a/src/test/java/com/thealgorithms/maths/ReverseNumberTest.java b/src/test/java/com/thealgorithms/maths/ReverseNumberTest.java new file mode 100644 index 000000000..a6c25df5a --- /dev/null +++ b/src/test/java/com/thealgorithms/maths/ReverseNumberTest.java @@ -0,0 +1,33 @@ +package com.thealgorithms.maths; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.util.HashMap; + +import org.junit.jupiter.api.Test; + +public class ReverseNumberTest { + + @Test + public void testReverseNumber() { + HashMap testCases = new HashMap<>(); + testCases.put(0, 0); + testCases.put(1, 1); + testCases.put(10, 1); + testCases.put(123, 321); + testCases.put(7890, 987); + + for (final var tc : testCases.entrySet()) { + assertEquals(ReverseNumber.reverseNumber(tc.getKey()), tc.getValue()); + } + } + + @Test + public void testReverseNumberThrowsExceptionForNegativeInput() { + assertThrows( + IllegalArgumentException.class, + () -> ReverseNumber.reverseNumber(-1) + ); + } +}