2013-03-18 5 views
4

동료 중 한 사람과 토론하고 있습니다 (논쟁을 읽습니다!). 이 코드는 매우 잘못되었다는 유지하지만 그는 그것으로 아무 문제가 없다 생각 : 나는 루프의 중복이 있기 때문에이 코드가 잘못되었다는 유지이 Java 코드가 맞습니까?

for (Iterator<String> iter = collectionOfStrings.iterator(); iter.hasNext();) { 
    String item = iter.next(); 
    ... 
} 

가. Iterator를 사용하거나 For 루프를 사용하지만 둘 다 동시에 사용할 필요는 없습니다.

Iterator<String> iter = collectionOfStrings.iterator(); 
while (iter.hasNext()) { 
    String item = iter.next(); 
    ... 
} 

여러분의 생각은 다음과 같이

나는 코드를 다시 작성합니다?

+3

루프 '에 대한이'어쨌든 '동안'루프 단지 구문 속기이다. 나는 논쟁의 요지를 알지 못한다 .... –

+3

'while' 역시 루프이다! – adarshr

+0

그냥 테스트 해보세요. –

답변

11

두 코드 모두 "잘못"이 아닙니다. 예상된다. 루프가 끝난 후에도 iter이 정의 된 상태이므로 두 번째 코드는 동등하지만 로컬 변수를 오염시킵니다.

1

동료가 맞습니다. for 루프가있는 첫 번째 코드는 정상적으로 실행되어야합니다.

실제로는 while도 루프이므로 코드와 his 모두 하나의 루프 및 반복기를 포함합니다.

5

두 예제 모두 구문 상 올바로 사용됩니다. 선언을 for 루프에 두는 것의 한 가지 장점은 코드 블록이 끝난 후에 변수가 해제되는 반면 반복기는 while 루프가 끝난 후에도 계속 유지된다는 것입니다.

2

사실 동일합니다. for는 단지 변형 일 뿐이며, for는 단지 변형 일뿐입니다. 당신은 두 번째가 좋은이

init 
while(cond){ 
.... 
incr 
} 
5

처럼

for (init;cond;incr){ 
... 
} 

을 위해 쓸 수 있습니다.

첫 번째가 약간 더 좋습니다. 루프 변수의 범위를 제한합니다.

그러나 자바 1.5 이후의 foreach 루프는 때때로 하나보다 더 우아 할 수있다

:

for (String item : collectionOfStrings) { 
    ... 
}