返回数组

时间:2017-03-21 19:01:30

标签: java arrays for-loop

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但我仍然不明白发生了什么?

有人可以一步一步详细解释这一点,这里到底发生了什么?

2 个答案:

答案 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));

DEMO