使用final变量实现循环

时间:2013-03-21 18:34:26

标签: java variables loops static final

有没有办法使用final变量实现循环? 我的意思是当初始化后不允许更改任何内容时,将运行指定迭代次数的循环!

4 个答案:

答案 0 :(得分:8)

是否允许递归,或者您是否真的需要像forwhile这样的循环结构?如果你可以使用递归,那么:

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

答案 1 :(得分: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]
}

答案 2 :(得分: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(); ) {
}

答案 3 :(得分: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语句的一部分,并且不使用任何用户声明的变量。