From b81bc37d637d70ca081fd01445d662df95ef6161 Mon Sep 17 00:00:00 2001 From: Klerk1t Date: Tue, 21 Jul 2026 19:30:51 +0300 Subject: [PATCH 1/3] Fix incorrect absolute minimum calculation --- .../com/thealgorithms/maths/AbsoluteMin.java | 18 +++++++++--------- .../thealgorithms/maths/AbsoluteMinTest.java | 8 ++++++-- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/thealgorithms/maths/AbsoluteMin.java b/src/main/java/com/thealgorithms/maths/AbsoluteMin.java index 1b9575a330dd..4b3e6ff16b65 100644 --- a/src/main/java/com/thealgorithms/maths/AbsoluteMin.java +++ b/src/main/java/com/thealgorithms/maths/AbsoluteMin.java @@ -1,7 +1,5 @@ package com.thealgorithms.maths; -import java.util.Arrays; - public final class AbsoluteMin { private AbsoluteMin() { } @@ -13,14 +11,16 @@ private AbsoluteMin() { * @return The absolute min value */ public static int getMinValue(int... numbers) { - if (numbers.length == 0) { - throw new IllegalArgumentException("Numbers array cannot be empty"); + if (numbers == null || numbers.length == 0) { + throw new IllegalArgumentException("Numbers array cannot be empty or null"); } - var absMinWrapper = new Object() { int value = numbers[0]; }; - - Arrays.stream(numbers).skip(1).filter(number -> Math.abs(number) <= Math.abs(absMinWrapper.value)).forEach(number -> absMinWrapper.value = Math.min(absMinWrapper.value, number)); - - return absMinWrapper.value; + int absMin = numbers[0]; + for (int i = 1; i < numbers.length; i++) { + if (Math.abs(numbers[i]) < Math.abs(absMin) || (Math.abs(numbers[i]) == Math.abs(absMin) && numbers[i] < absMin)) { + absMin = numbers[i]; + } + } + return absMin; } } diff --git a/src/test/java/com/thealgorithms/maths/AbsoluteMinTest.java b/src/test/java/com/thealgorithms/maths/AbsoluteMinTest.java index dfca757fd877..07a8b39d3386 100644 --- a/src/test/java/com/thealgorithms/maths/AbsoluteMinTest.java +++ b/src/test/java/com/thealgorithms/maths/AbsoluteMinTest.java @@ -11,12 +11,16 @@ public class AbsoluteMinTest { void testGetMinValue() { assertEquals(0, AbsoluteMin.getMinValue(4, 0, 16)); assertEquals(-2, AbsoluteMin.getMinValue(3, -10, -2)); + assertEquals(-2, AbsoluteMin.getMinValue(-3, -10, -2)); + assertEquals(2, AbsoluteMin.getMinValue(-3, -10, 2)); + assertEquals(2, AbsoluteMin.getMinValue(-5, 2)); + assertEquals(2, AbsoluteMin.getMinValue(2, -5)); } @Test void testGetMinValueWithNoArguments() { - Exception exception = assertThrows(IllegalArgumentException.class, AbsoluteMin::getMinValue); - assertEquals("Numbers array cannot be empty", exception.getMessage()); + assertThrows(IllegalArgumentException.class, AbsoluteMin::getMinValue); + assertThrows(IllegalArgumentException.class, () -> AbsoluteMin.getMinValue((int[]) null)); } @Test From b8c0c4c639c69edf57cf718bccc8b7c1b4f2adbd Mon Sep 17 00:00:00 2001 From: Klerk1t Date: Tue, 21 Jul 2026 21:26:44 +0300 Subject: [PATCH 2/3] Fix incorrect absolute minimum calculation --- src/test/java/com/thealgorithms/maths/AbsoluteMinTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/maths/AbsoluteMinTest.java b/src/test/java/com/thealgorithms/maths/AbsoluteMinTest.java index 07a8b39d3386..e039d590b922 100644 --- a/src/test/java/com/thealgorithms/maths/AbsoluteMinTest.java +++ b/src/test/java/com/thealgorithms/maths/AbsoluteMinTest.java @@ -20,7 +20,6 @@ void testGetMinValue() { @Test void testGetMinValueWithNoArguments() { assertThrows(IllegalArgumentException.class, AbsoluteMin::getMinValue); - assertThrows(IllegalArgumentException.class, () -> AbsoluteMin.getMinValue((int[]) null)); } @Test From 5dc5439ed47bcda8f5b5e7b5126fc5add4d32e13 Mon Sep 17 00:00:00 2001 From: Klerk1t Date: Wed, 22 Jul 2026 20:24:30 +0300 Subject: [PATCH 3/3] Handle Integer.MIN_VALUE overflow in AbsoluteMin --- src/main/java/com/thealgorithms/maths/AbsoluteMin.java | 9 +++++---- .../java/com/thealgorithms/maths/AbsoluteMinTest.java | 9 +++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/thealgorithms/maths/AbsoluteMin.java b/src/main/java/com/thealgorithms/maths/AbsoluteMin.java index 4b3e6ff16b65..aab6fe0f426d 100644 --- a/src/main/java/com/thealgorithms/maths/AbsoluteMin.java +++ b/src/main/java/com/thealgorithms/maths/AbsoluteMin.java @@ -15,12 +15,13 @@ public static int getMinValue(int... numbers) { throw new IllegalArgumentException("Numbers array cannot be empty or null"); } - int absMin = numbers[0]; + long absMin = numbers[0]; for (int i = 1; i < numbers.length; i++) { - if (Math.abs(numbers[i]) < Math.abs(absMin) || (Math.abs(numbers[i]) == Math.abs(absMin) && numbers[i] < absMin)) { - absMin = numbers[i]; + long current = numbers[i]; + if (Math.abs(current) < Math.abs(absMin) || (Math.abs(current) == Math.abs(absMin) && current < absMin)) { + absMin = current; } } - return absMin; + return (int) absMin; } } diff --git a/src/test/java/com/thealgorithms/maths/AbsoluteMinTest.java b/src/test/java/com/thealgorithms/maths/AbsoluteMinTest.java index e039d590b922..070ff4ae3147 100644 --- a/src/test/java/com/thealgorithms/maths/AbsoluteMinTest.java +++ b/src/test/java/com/thealgorithms/maths/AbsoluteMinTest.java @@ -27,4 +27,13 @@ void testGetMinValueWithSameAbsoluteValues() { assertEquals(-5, AbsoluteMin.getMinValue(-5, 5)); assertEquals(-5, AbsoluteMin.getMinValue(5, -5)); } + + @Test + void testIntegerMinValueOverflow() { + assertEquals(1, AbsoluteMin.getMinValue(Integer.MIN_VALUE, 1)); + assertEquals(-1, AbsoluteMin.getMinValue(Integer.MIN_VALUE, -1)); + assertEquals(0, AbsoluteMin.getMinValue(Integer.MIN_VALUE, 0)); + assertEquals(Integer.MIN_VALUE, AbsoluteMin.getMinValue(Integer.MIN_VALUE)); + assertEquals(Integer.MAX_VALUE, AbsoluteMin.getMinValue(Integer.MIN_VALUE, Integer.MAX_VALUE)); + } }