Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用最终变量实现循环_Java_Variables_Loops_Static_Final - Fatal编程技术网

Java 使用最终变量实现循环

Java 使用最终变量实现循环,java,variables,loops,static,final,Java,Variables,Loops,Static,Final,是否有一种使用最终变量实现循环的方法? 我指的是一个循环,当初始化后不允许更改任何内容时,它将运行指定次数的迭代 像这样的- final int max = 5; for(int i=0; i<max; i++) {} 再来一次- List<String> list = ...... for(final Iterator iterator = list.iterator(); iterator.hasNext(); ) { } List=。。。。。。 for(final I

是否有一种使用最终变量实现循环的方法? 我指的是一个循环,当初始化后不允许更改任何内容时,它将运行指定次数的迭代

像这样的-

final int max = 5;
for(int i=0; i<max; i++) {}
再来一次-

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

是否允许递归,或者是否确实需要像
for
while
这样的循环构造?如果可以使用递归,则:

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

创建一个大小为所需迭代次数的数组,然后在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语句的一部分,并且不使用任何用户声明的变量。

一种方法是创建一个表示任意范围的
Iterable
类(实际上不必将所有值存储在列表中):


你的问题不清楚……见鬼,这可能很简单,就像(final AtomicInteger i=new AtomicInteger(0);i.get()。最终变量并不意味着不可变的对象。也不确定
i
flag
是否不执行“初始化后不允许更改任何内容”的规则
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);
    }
  }
}
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]
}