但是对于这种方法,我不了解Integer.MAX_VALUE和Integer.MIN_VALUE的目的。
通过与起步,
smallest设定为
Integer.MAX_VALUE和
largest设置为
Integer.MIN_VALUE,他们没有后来担心在特殊的情况
smallest和
largest没有价值呢。如果我要查看的数据
10的第一个值为a,那么
numbers[i]<smallest它将为true(因为
10为
<
Integer.MAX_VALUE),我们将更新
smallest为
10。同样,
numbers[i]>largest将是
true因为
10是
>
Integer.MIN_VALUE,我们将更新
largest。等等。
当然,这样做时,必须确保要查看的数据中至少有一个值。否则,您最终会在
smallest和中获得伪数字
largest。
请注意onome Sotu在评论中指出观点:
…如果数组中的第一项大于其余项,则由于else-if语句,最大项将始终为Integer.MIN_VALUE。
这是真的 这是一个演示问题的简单示例(实时复制):
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 }}要解决此问题,请执行以下任一操作:
不要使用
else
,或从第一个元素开始
smallest
并largest
等于第一个元素,然后循环其余元素,并保持else if
。
这是第二个示例(实时复制):
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 }}


