Skip to content

Commit ecf7664

Browse files
committed
Fix AbsoluteMin.getMinValue to compare by absolute magnitude, not raw value
1 parent 8a20fa9 commit ecf7664

2 files changed

Lines changed: 15 additions & 7 deletions

File tree

src/main/java/com/thealgorithms/maths/AbsoluteMin.java

Lines changed: 11 additions & 7 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
}
@@ -17,10 +15,16 @@ public static int getMinValue(int... numbers) {
1715
throw new IllegalArgumentException("Numbers array cannot be empty");
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 minValue = numbers[0];
19+
for (int number : numbers) {
20+
long absoluteNumber = Math.abs((long) number);
21+
long absoluteMinValue = Math.abs((long) minValue);
22+
if (absoluteNumber < absoluteMinValue
23+
|| (absoluteNumber == absoluteMinValue && number < minValue)) {
24+
// For equal absolute values, consistently choose the numerically smaller value.
25+
minValue = number;
26+
}
27+
}
28+
return minValue;
2529
}
2630
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@ public class AbsoluteMinTest {
99

1010
@Test
1111
void testGetMinValue() {
12+
assertEquals(2, AbsoluteMin.getMinValue(-5, 2));
1213
assertEquals(0, AbsoluteMin.getMinValue(4, 0, 16));
1314
assertEquals(-2, AbsoluteMin.getMinValue(3, -10, -2));
15+
assertEquals(-2, AbsoluteMin.getMinValue(-5, -2));
16+
assertEquals(2, AbsoluteMin.getMinValue(5, 2));
1417
}
1518

1619
@Test
@@ -21,6 +24,7 @@ void testGetMinValueWithNoArguments() {
2124

2225
@Test
2326
void testGetMinValueWithSameAbsoluteValues() {
27+
assertEquals(-3, AbsoluteMin.getMinValue(-3, 3));
2428
assertEquals(-5, AbsoluteMin.getMinValue(-5, 5));
2529
assertEquals(-5, AbsoluteMin.getMinValue(5, -5));
2630
}

0 commit comments

Comments
 (0)