Skip to content

Commit b81bc37

Browse files
committed
Fix incorrect absolute minimum calculation
1 parent 8a20fa9 commit b81bc37

2 files changed

Lines changed: 15 additions & 11 deletions

File tree

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.thealgorithms.maths;
22

3-
import java.util.Arrays;
4-
53
public final class AbsoluteMin {
64
private AbsoluteMin() {
75
}
@@ -13,14 +11,16 @@ private AbsoluteMin() {
1311
* @return The absolute min value
1412
*/
1513
public static int getMinValue(int... numbers) {
16-
if (numbers.length == 0) {
17-
throw new IllegalArgumentException("Numbers array cannot be empty");
14+
if (numbers == null || numbers.length == 0) {
15+
throw new IllegalArgumentException("Numbers array cannot be empty or null");
1816
}
1917

20-
var absMinWrapper = new Object() { int value = numbers[0]; };
21-
22-
Arrays.stream(numbers).skip(1).filter(number -> Math.abs(number) <= Math.abs(absMinWrapper.value)).forEach(number -> absMinWrapper.value = Math.min(absMinWrapper.value, number));
23-
24-
return absMinWrapper.value;
18+
int absMin = numbers[0];
19+
for (int i = 1; i < numbers.length; i++) {
20+
if (Math.abs(numbers[i]) < Math.abs(absMin) || (Math.abs(numbers[i]) == Math.abs(absMin) && numbers[i] < absMin)) {
21+
absMin = numbers[i];
22+
}
23+
}
24+
return absMin;
2525
}
2626
}

src/test/java/com/thealgorithms/maths/AbsoluteMinTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,16 @@ public class AbsoluteMinTest {
1111
void testGetMinValue() {
1212
assertEquals(0, AbsoluteMin.getMinValue(4, 0, 16));
1313
assertEquals(-2, AbsoluteMin.getMinValue(3, -10, -2));
14+
assertEquals(-2, AbsoluteMin.getMinValue(-3, -10, -2));
15+
assertEquals(2, AbsoluteMin.getMinValue(-3, -10, 2));
16+
assertEquals(2, AbsoluteMin.getMinValue(-5, 2));
17+
assertEquals(2, AbsoluteMin.getMinValue(2, -5));
1418
}
1519

1620
@Test
1721
void testGetMinValueWithNoArguments() {
18-
Exception exception = assertThrows(IllegalArgumentException.class, AbsoluteMin::getMinValue);
19-
assertEquals("Numbers array cannot be empty", exception.getMessage());
22+
assertThrows(IllegalArgumentException.class, AbsoluteMin::getMinValue);
23+
assertThrows(IllegalArgumentException.class, () -> AbsoluteMin.getMinValue((int[]) null));
2024
}
2125

2226
@Test

0 commit comments

Comments
 (0)