2012-09-16 45 views
1

帮助我理解此代码的最后部分,旨在打印序列中最大和次数最多的数字。我不完全理解的是,else if声明有什么需要?与代码:获取序列中的最大和第二大数字

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

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

那么这行代码的目的究竟是什么呢?以及整数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; 
    } 
+2

考虑输入8,10,9 ...所以最大将被设置为8,第二最大设置为-1,然后是10,最大是10,第二大是8但是对于9,最大将保持10而第二大需要更新..也,我认为该程序想要允许0,所以它设置默认-1。 – vellvisher

+0

如果'input> secondLargest'但是'!(input> largest)',那么没有'else if','secondLargest'将是不正确的。 – oldrinb

+2

初始化为-1的原因是,显然有一个假设,即序列都是正数。零表示“序列结束”,-1表示“未找到”(或类似的东西)。 –

回答

3

与序列

1 2 3 5 4 

试试你的程序如果省略else if (input > secondLargest) { secondLargest = input; }那么结果将是最大= 5和secondLargest = 3,这是不正确。

1

else if代码处理的情况下input落入largestsecondLargest的电流值之间。

1

else if的部分是,在情况的input不大于largest更大,但比secondLargest,更大当secondLargest应该改变,即使largest不会。