2013-03-21 1 views
2

최종 변수를 사용하여 루프를 구현하는 방법이 있습니까? 초기화 후 아무 것도 변경할 수 없을 때 지정된 반복 횟수 동안 실행되는 루프를 의미합니다!최종 변수를 사용하여 루프 구현

+6

당신의 질문은 확실하지 않습니다 ... – assylias

+2

지옥, 그것은'for (final AtomicInteger i = 새로운 AtomicInteger (0); i.get() yshavit

답변

8

재귀가 허용하거나 그대로 할

final boolean flag = true; 
while(flag) { 
    // keep doing your stuff and break after certain point 
} 

하나 더 - 또 다른 흥미로운 원 -처럼 구성 루프를 필요 for 또는 while? 당신이 다음 재귀를 사용할 수있는 경우 :

void loop(final int n) { 
    if (n == 0) { 
    return; 
    } else { 
    System.out.println("Count: " + n); 
    loop(n-1); 
    } 
} 
+0

재미 있습니다 :) –

0

이런 식으로 뭔가 -

final int max = 5; 
for(int i=0; i<max; i++) {} 

또는

List<String> list = ...... 
for(final Iterator iterator = list.iterator(); iterator.hasNext();) { 
} 
+0

'i' 또는'flag'가 "초기화 후 아무 것도 바꿀 수 없다"는 규칙을 위반하지 않는다는 것을 확신하지 못했습니다. – Pshemo

0

는, 크기가 반복 필요한 숫자가 배열을 만들기를위한 각 루프에서 사용 :

public class Test { 
    public static void main(String[] args) { 
    final int N = 20; 
    final int[] control = new int[N]; 
    for(final int i : control){ 
     System.out.println(i); 
    } 
    } 
} 

여기에 트릭이 있다는 것입니다 반복 인덱싱은 향상된 for 문의 일부로 컴파일러에서 생성되며 사용자가 선언 한 변수를 사용하지 않습니다.

public static class FixedIntRange implements Iterable<Integer> { 
    private final int min; 
    private final int max; 

    public FixedIntRange(final int min, final int max) { 
     this.min = min; 
     this.max = max; 
    } 

    @Override 
    public Iterator<Integer> iterator() { 
     return new Iterator<Integer>() { 
      private Integer next = FixedIntRange.this.min; 

      @Override 
      public boolean hasNext() { 
       return next != null; 
      } 

      @Override 
      public Integer next() { 
       final Integer ret = next; 
       next = ret == max ? null : next + 1; 
       return ret; 
      } 

      @Override 
      public void remove() { 
       throw new UnsupportedOperationException(); 
      } 
     }; 
    } 
} 

을하고 정상적으로 반복 :

1

한 가지 방법은 (실제로 목록의 모든 값을 저장할 필요없이) 임의의 범위를 나타내는 Iterable<Integer> 클래스를 생성하는 것이다

for (final int i : new FixedIntRange(-10, 20)) { 
    // this will be run for each i in the range [-10, 20] 
} 
관련 문제