1

帮助我理解这段代码的最后一部分,它旨在打印序列中的最大和第二大数字。我不完全理解的是,else if声明的必要性是什么?使用代码:

 if (input > largest) {
        secondLargest = largest;
        largest = input;

那不应该做正确的工作吗?它检查输入是否大于最大数字,将第二大数字设置为前一个最大数字。并用输入的一个用户更新新的最大数字。

那么这行代码的目的到底是什么呢?以及整数largestsecondLargest设置为的任何原因,-1而不仅仅是0,它与sentinel中断程序设置的原因有关0吗?

} else if (input > secondLargest) {
    secondLargest = input;

.

 int largest = -1;
  int secondLargest = -1;
  while (true) {
     int input = readInt(" ? ");
     if (input == SENTINEL) break;
     if (input > largest) {
        secondLargest = largest;
        largest = input;
     } else if (input > secondLargest) {
        secondLargest = input;
     }
4

3 回答 3

3

使用序列尝试您的程序

    1 2 3 5 4

如果省略else if (input > secondLargest) { secondLargest = input; }则结果将是最大的=5 和秒最大的=3,这是不正确的。

于 2012-09-16T06:38:00.353 回答
1

else if代码处理input介于 和 的当前值之间的largest情况secondLargest

于 2012-09-16T06:35:07.150 回答
1

else if部分是如果在input不大于largest但大于的情况下secondLargestsecondLargest即使largest不会改变,也应该改变。

于 2012-09-16T06:36:29.360 回答