int largest = 0;
int secondLargest = 0;
for(int i = 0; i < array.length; i++) {
if(array[i] > largest) {
secondLargest = largest;
largest = array[i];
} else if(array[i] > secondLargest) {
secondLargest = array[i];
}
}
int[] array2 = {2, 4, 6, 8, 10, 12, 14};
我有这个代码比较数组中的值并返回两个最大的值。
我不明白如果值初始化为0,这个循环如何遍历数组。我尝试在eclipse中使用debug但我仍然不明白发生了什么?
有人可以一步一步详细解释这一点,这里到底发生了什么?
答案 0 :(得分:1)
此代码假定数组中的所有值都是正整数。
如果数组初始化为零,它仍会遍历数组,但不会更改数值。
如果我们一步一步走:
for循环在数组中逐个元素地读取。
如果当前元素(2
)大于我们找到的较大元素(还),(在第一次运行中它是0
。因此第一个值(在这种情况2
)已分配给largest
。
0
)保存为secondLargest
。4
),再次进行比较。4
分配给最大的4 > 2
secondLargest
将是2
。答案 1 :(得分:0)
更安全(就负数等而言)并且可能更容易理解的解决方案是将数组转换为列表,按相反顺序排序,然后只取前两个元素
int[] a = {2, 4, 6, 8, 10, 12, 14};
List<Integer> f = IntStream.of(a).boxed().collect(Collectors.toList());
f.sort(Comparator.reverseOrder());
System.out.println(f.get(0) +" - " + f.get(1));