说明
您的代码有两个问题。第一个是,正如其他人已经指出的那样,您以Integer.MAX_VALUE 作为初始猜测,这是错误的逻辑。
您需要使用可能的最差最大值作为初始猜测。否则你的元素总是会更小,因此你最初的猜测是最大的元素。这就是为什么我们首先猜测MIN_VALUE 作为最大元素。由于数组的元素只能变得更大。只需在纸上播放一个像 {1, 2} 这样的小例子的算法,你就会明白为什么这样做是有意义的。
第二个问题是您实际上正在考虑所有值,但您只想考虑偶数值。我们通过跳过所有奇数值轻松解决这个问题。
代码
这是您的代码,其中包含两个修复:
public static void main(String[] args) {
int[] a = new int[]{10, 46, 78, 32, 3, 80, 92, 11, 39, 57};
System.out.println(Arrays.toString(a));
// Start with lowest value as initial guess
int largest = Integer.MIN_VALUE;
for (int number : a) {
// Skip number if odd
if (number % 2 == 1) {
continue;
}
// Now we only consider and collect even numbers
if (number > largest) {
// Update the current guess
largest = number;
}
}
// We now considered all elements, the guess is
// final and correct.
// And also even since we skipped odd values.
System.out.println(largest);
}
注意事项
如果数组不包含任何偶数,则输出将为Integer.MIN_VALUE,您可以考虑这种特殊情况并使用一些if 子句来捕获它。
其他人建议使用数组的一个元素作为初始猜测。由于您只需要偶数值,因此您可能只考虑使用数组的 偶数值 进行初始猜测。否则,如果数组不包含偶数,则再次输出奇数。
您可以使用通用且紧凑的Stream 解决方案来替代自定义方法:
int maxEven = Arrays.stream(a)
.filter(a -> a % 2 == 0) // Only even values
.max() // OptionalInt
.orElse(-1); // Gets the value or uses -1 if not present