2017-03-21 4 views
-1
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에서 디버그를 사용해 보았지만 여전히 무슨 일이 벌어지고 있는지 이해하지 못합니까?

누군가가 자세히 설명해 주실 수 있습니까? 단계별로 정확히 여기서 어떻게됩니까?

+0

모든 정수가 양수라고 가정합니다. 그것들이 모두'-100' (예를 들어) 일 경우, 가장 큰 것으로 '0'을 반환합니다. – byxor

답변

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

1

이 코드는 배열의 모든 값이 양의 정수 있다고 가정합니다.

배열을 0으로 초기화하면 배열을 계속 지나치지 만 값은 변경되지 않습니다. 우리는 단계별로 갈 경우

은 : 루프

  • 는 배열의 요소에 의해 요소를 읽습니다.

  • 현재 요소 (2)는 그것이 0의 제 런 ((아직) 우리가 발견 한 클수록보다 큰 경우. largest.

  • 할당이 경우 2에 따라서 첫 번째 값()
  • 는 그럼 그 다음은 다시 비교를 수행하는 다음 요소 (4)로 이동합니다 secondLargest.
  • 로 (0 여기) 현재 최대를 저장합니다. 이제
  • 4 > 2로 최대에 4를 할당합니다
  • 따라서 secondLargest2이됩니다.
  • 배열이 끝날 때까지 계속됩니다.
관련 문제