2013-08-07 4 views
1

다른 사람의 코드에 대한 단위 테스트를 작성하는 동안 재미있는 ":"연산자를 사용했습니다. 그것은 다음과 같습니다 : "" ""삼항 문을 작성할 때이 될 것처럼하지 않고 자체에서 사용하는 연산자 나는 본 적이 없다For 표현식의 Java ":"연산자

for(Class classInstance : instanceOfOtherClass){ 

//Do some irrelevant stuff 

} 

. 나는 꽤 많은 수의 인터넷 검색을했는데,이 책을 읽어야하는 방법에 대해 현명한 대답을 찾을 수없는 것 같습니다 ...

나는 이것을 복잡하게하고 있습니까? 아무도 그것을 본 적이 있습니까?

:

+4

이것은 [Enhanced for-loop]입니다. (http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.14.2) –

+2

무엇이 궁금합니다. 당신이 사용한 검색어. –

+0

10 년 전에 Java 5에 추가되었으므로 이전 웹 페이지에서는 언급되지 않습니다. 나는이 링크 copyright 2000-2001을 좋아한다 : http://jcp.org/aboutJava/communityprocess/jsr/tiger/enhanced-for.html –

답변

5

향후 ference는, 당신은 입력했다 : 루프

자바 7 : 구글에

, 당신을 도움이 것 두 번째 결과입니다. 당신의 방어에, 당신이 "7"을 넣지 않았다면, 해결책을 찾기가 더 어려웠을 것입니다. (자바 7에서 소개 되었기 때문에가 아니라 java 5에 있었기 때문에, 현재 지원된다면 7을 입력하면 최신 문서를 찾을 확률이 높아집니다. 이는 enhanced for loop 또는 for-each loop의 예입니다. 요컨대

:

EnhancedForStatement 다음 Expressioniterable또는 배열 유형이어야

for (FormalParameter : Expression) Statement 

.

간단 측면에서

(배열 예,하지만 implements Iterable는 사용할 수 아무것도주의) :

String[] words = new String[]{"This","is","the","end"}; 

for (int i = 0; i < words.length; i++) 
{ 
     System.out.println(words[i]); 
} 

A-각 루프로 작성된입니다 :

for (String s : words) 
{ 
     System.out.println(s); 
} 

당신이 궁금해하는 경우 효율성에 대해서는 this post을 확인하십시오.

+0

ForEach 루프는 java 5에 도입되었습니다. – AdamSpurgin

+0

@AdamSpurgin 나는 그것을 제안 할 의도가 없었습니다. 나는 편집을했다. –

4

그것은 여기

for(char c : string.toCharArray()){ 
    System.out.println(c); 
} 

당신이 사이의 비교와 고전 하나를 찾을 수이 문자열의 문자를 반복합니다 예를 들어

for(Class object : Objects){ 
    //it will iterate through all the objects contained in Objects 
    //Objects can be an array, a list, etc. 
    //object Class/Type must match the class of the objects contained in Objects 

} 

for each를 불렀다 Fastest way to iterate an Array in Java: loop variable vs enhanced for statement

0

먼저 배열과 함께 사용할 수 있습니다.유형 MyClass의 객체의 배열을 고려 :

MyClass[] objects = new MyClass[SIZE]; 

으로 반복과 같이 :

for(MyClass object : objects) { 
    // do something with the individual object. 
} 

둘째, 당신은 반복 가능한 컬렉션과 함께 사용할 수 있습니다.

class MyClassList implements Iterable<MyClass> { 
    // define necessary methods to implement the Iterable interface! 
} 

이제 우리는 수집 할 수 있습니다 :

MyClassList objects = new MyClassList(); 
// fill the collection somehow. 

을 그리고 반복 :

for(MyClass object : objects) { 
    // do something with the individual object 
} 
클래스 개별 요소의 MyClass을 고려하고 Iterable의 서브 클래스를 정의하여 이들의 컬렉션을 만들

마지막으로이 구조의 주요 단점은 반복에서 요소의 위치에 액세스 할 수 없다는 것입니다.

int i = 0; 
for(MyClass object : objects) { 
    // do something with access to position i 
    i++; 
} 

나는 개인적으로 좋아하지 않는다 :

for(int i = 0; i < objects.size(); i++) { 
    // Here we have access to the position i 
} 

또는 임시 변통의 인덱스를 사용 : 당신이 루프를 사용해야 하나의 위치를 ​​알고 싶다면 주어진 object 위해 당신은, 처리되는 마지막 해킹, 그리고 그냥 고전적인 for 루프로 돌아갈 것이다. 희망이 도움이! 사용

0
// Infinite 
for (; ;) { 

    // Code 
} 

//Array<Object> 
int[] numbers = 
     {1,3,6,9,12,15,18}; 
    for (int item : numbers) { 
     System.out.println("Count is: " + item); 
    } 

//List<Object> 
    ArrayList<Object> objectList ;//I assume it's perfectly initialized and filled 

    for (Object temp : objectList) { 
    System.out.println(temp); 
} 
0

예 :

String[] words = {"one", "two", "three", "one", "two", "three"}; 
for(String one : words){ 
System.out.println("found it"); 
} 

을 지금, 나는 당신이 당신이 실행할 때 두 번 화면에 "그것을 발견"인쇄 것이라고 생각 내기. String = "one"의 각 인스턴스에 대해 한 번 ...하지만 잘못된 것입니다. 인쇄 내용이 "찾았습니다"라는 메시지가 6 번 나옵니다. 그 이유는 하나의 객체를 통해 다른 객체의 인스턴스를 검색하고 있기 때문입니다! 문자열 배열 내에 String 개체가 6 개 있으므로 확장 된 for 루프 내부에서 여러 번 구문을 수행합니다. 이 다채로운 설명을 통해 더 쉽게 이해할 수 있었으면합니다.