2

最終変数を使用してループを実装する方法はありますか? 初期化後に何も変更することが許可されていない場合に、指定された反復回数実行されるループを意味します!

4

4 に答える 4

8

再帰は許可されていますか、それとも or のようなループ構造が文字通り必要ですforwhile? 再帰を使用できる場合は、次のようになります。

void loop(final int n) {
  if (n == 0) {
    return;
  } else {
    System.out.println("Count: " + n);
    loop(n-1);
  }
}
于 2013-03-21T18:37:12.640 に答える
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]
}
于 2013-03-21T18:46:06.650 に答える
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ステートメントの一部としてコンパイラーによって生成され、ユーザーが宣言した変数を使用しないことです。

于 2013-03-21T18:40:54.540 に答える
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(); ) {
}
于 2013-03-21T18:36:04.253 に答える