2011-10-20 2 views
2

나는 아래의 추적 코드를 이해하려고 노력 해요 :무엇을 의미합니까 ';' 성명서 안에?

/** 
    * Simple insertion sort. 
    * @param a an array of Comparable items. 
    */ 
    public static void insertionSort(Comparable [ ] a) 
    { 
     for(int p = 1; p < a.length; p++) 
     { 
      Comparable tmp = a[ p ]; 
      int j = p; 
      for(; j > 0 && tmp.compareTo(a[j-1]) < 0; j--) 
       a[ j ] = a[ j - 1 ]; 
      a[ j ] = tmp; 
     } 
    } 

을하지만 난 for(;) 그래서 난 당신의 도움이들 필요 무엇을 의미하는지 모르겠어요. 중복 된 경우 죄송하지만 여기서는 Google에서 검색하지만 아직까지는 검색하지 않았습니다.

+0

이것은 모든 루프가 세 부분 초기화, 조건 확인, 증가/감소가 있음을 알아야하기 때문에 변수 j를 간단히 초기화합니다. – Mike

답변

7

for 루프의 첫 번째 부분은 루핑이 시작되기 전에 발생합니다. 대개 변수를 지정하는 데 사용됩니다.

";" ("브래킷"은 제외하고) "루프가 시작되기 전에 내가하고 싶은 것은 아무것도 없다" 변수를 할당 할 필요가 없습니다.

+0

전체 3 부분 for 루프는 선택 사항입니다. 따라서, 예를 들어 무한 루프에 대해 for (;;)를 사용할 수 있습니다. 비록 보통 대신에 while (true)를 사용하는 것을 선호하지만. – Brian

+0

매우 사실입니다. for (;;)는 테스트 할 때만 선호되며 변수 등을 추가 할 수도 있습니다. 반면에 (true)는 분명 더 읽기 쉽습니다. –

+0

for (int j) ...로 변경해야한다고 말하고 싶었지만 루프 아래에서'j'를 참조했다. 그러나 이것은 for 루프 위에있는 줄을 완전히 제거 할 수 없으며'int j; for (j = p ...')가 필요하다는 것을 의미합니다. 그럼에도 불구하고 여전히 버전으로 롤백했습니다. 틀림. – Brian

0

두 번째 for 루프 구문을 배회하고 있습니다. 초기화 부분이없는 일반 for 루프입니다. j은 루프가 끝난 후에 외부에서 사용되기 때문에 루프 앞에 선언해야합니다.

0

그냥 구분 기호입니다. 앞에 아무 것도 없다면 로직의 일부가 비어 있음을 의미합니다. 형식은없는 모든 루프 형태 "각 XXX에 대해이 작업을 수행"에 있기 때문에

for( <stuff to do before starting the loop> 
    ; 
     <stuff to do before each iteration, and maybe give a value of 0 to terminate it> 
    ; 
     <stuff to do at the end of each iteration> 
    ) 

은 솔직히, 그것은 매우 유연 찾을 수 있습니다. 각 섹션에 넣는 것은 실제로 임의적입니다.

2

그것은 간단하다 : 그것은 기본적으로

for(..a.. ; ..bb.. ; ..c..){ // }. 

..a을 의미합니다 .. : 어떤 또는 빈을 떠날 경우 초기화하는 것입니다. ..b .. : 루프가 한 번 실행되면 수행하려는 모든 검사. ..c .. 루프를 한 번 실행 한 후에 변수에 대한 모든 변경

관련 문제