2013-03-21 101 views
2

有沒有一種方法來實現使用最終變量的循環? 我的意思是一個循環,當你不允許在初始化後改變任何東西時,它會運行指定的迭代次數!使用最終變量實現循環

+6

你的問題不清楚... – assylias 2013-03-21 18:37:17

+2

哎呀,它可能是那麼容易,因爲'的(最終的AtomicInteger I =新的AtomicInteger(0); i.get() yshavit 2013-03-21 19:15:04

回答

8

是遞歸允許的,或者你從字面上需要一個循環構造像forwhile?如果你可以使用遞歸的話:

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

這很有趣:) – 2013-03-21 18:40:51

0

事情是這樣的 -

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

或者另一個有趣的單

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

一個更多 -

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

不確定'i'或'flag'是否不制動規則「初始化後你不允許改變任何東西」 – Pshemo 2013-03-21 18:37:26

0

創建一個數組,其大小爲所需的迭代次數,然後在for-each循環使用它:

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語句的一部分,不使用任何用戶聲明的變量。

1

的一種方式是創建表示任意範圍的Iterable<Integer>類(而實際上不必所有的值存儲在一個列表):

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(); 
      } 
     }; 
    } 
} 

,然後遍歷其通常:

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