2012-09-16 4 views
1

시퀀스에서 두 번째로 큰 숫자를 인쇄하는 것을 목표로하는이 코드의 마지막 부분을 이해하게 도와주세요. 내가 완전히 이해하지 못하는 것은 무엇입니까 else if 성명에 대한 필요성은 무엇입니까? 코드 :시퀀스에서 최대 및 두 번째로 큰 숫자 얻기

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

해당 작업을 수행하지 않아야합니까? 입력이 최대 숫자보다 큰지 점검하고, 두 번째 가장 큰 숫자를 이전 가장 큰 숫자로 설정합니다. 입력 된 하나의 사용자로 새로운 가장 큰 번호를 업데이트하십시오.

그러면이 코드 줄의 목적은 정확히 무엇입니까? largestsecondLargest의 정수가 0이 아닌 -1으로 설정된 이유는 프로그램을 중단하는 sentinel과 관련이 있으며 0으로 설정되어 있습니까?

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

. inputlargestsecondLargest과 현재 값 사이에 떨어지는 곳

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로 초기화하는 이유는 분명히 시퀀스가 ​​모두 양수라는 가정 때문입니다. 0은 "시퀀스 끝"을 의미하고 -1은 "찾을 수 없음"(또는 이와 비슷한 것)을 의미합니다. –

답변

3

당신이 다음 가장 큰 = 5 secondLargest = 3이 될 것입니다 결과 else if (input > secondLargest) { secondLargest = input; }를 생략하면 순서

1 2 3 5 4 

로 프로그램을 시도, 즉 올바르지 않습니다.

1

else if 코드의 경우를 다룬다. secondLargest가 있더라도 largest 않은 것 변경해야 할 때

1

else if 일부 경우에 input 않은 경우 largest 초과하지만 secondLargest보다 크다.

관련 문제