# Explanation on Integer.MAX_VALUE and Integer.MIN_VALUE to find min and max value in an array

but as for this method, I don’t understand the purpose of Integer.MAX_VALUE and Integer.MIN_VALUE.

By starting out with `smallest` set to `Integer.MAX_VALUE` and `largest` set to `Integer.MIN_VALUE`, they don’t have to worry later about the special case where `smallest` and `largest` don’t have a value yet. If the data I’m looking through has a `10` as the first value, then `numbers[i]<smallest` will be true (because `10` is `<` `Integer.MAX_VALUE`) and we’ll update `smallest` to be `10`. Similarly, `numbers[i]>largest` will be `true` because `10` is `>` `Integer.MIN_VALUE` and we’ll update `largest`. And so on.

Of course, when doing this, you must ensure that you have at least one value in the data you’re looking at. Otherwise, you end up with apocryphal numbers in `smallest` and `largest`.

Note the point Onome Sotu makes in the comments:

…if the first item in the array is larger than the rest, then the largest item will always be Integer.MIN_VALUE because of the else-if statement.

Which is true; here’s a simpler example demonstrating the problem (live copy):

```public class Example
{
public static void main(String[] args) throws Exception {
int[] values = {5, 1, 2};
int smallest = Integer.MAX_VALUE;
int largest  = Integer.MIN_VALUE;
for (int value : values) {
if (value < smallest) {
smallest = value;
} else if (value > largest) {
largest = value;
}
}
System.out.println(smallest + ", " + largest); // 1, 2 -- WRONG
}
}

```

To fix it, either:

1. Don’t use `else`, or
2. Start with `smallest` and `largest` equal to the first element, and then loop the remaining elements, keeping the `else if`.

Here’s an example of that second one (live copy):

```public class Example
{
public static void main(String[] args) throws Exception {
int[] values = {5, 1, 2};
int smallest = values[0];
int largest  = values[0];
for (int n = 1; n < values.length; ++n) {
int value = values[n];
if (value < smallest) {
smallest = value;
} else if (value > largest) {
largest = value;
}
}
System.out.println(smallest + ", " + largest); // 1, 5
}
}

```