web-dev-qa-db-ja.com

Java:forループの初期化で複数の変数を初期化しますか?

異なるタイプの2つのループ変数が必要です。この作業を行う方法はありますか?

@Override
public T get(int index) throws IndexOutOfBoundsException {
    // syntax error on first 'int'
    for (Node<T> current = first, int currentIndex; current != null; 
            current = current.next, currentIndex++) {
        if (currentIndex == index) {
            return current.datum;
        }
    }
    throw new IndexOutOfBoundsException();
}
82
Nick Heiner

forの初期化 ステートメントは、 ローカル変数宣言 のルールに従います。

これは合法です(ばかげている場合):

for (int a = 0, b[] = { 1 }, c[][] = { { 1 }, { 2 } }; a < 10; a++) {
  // something
}

ただし、必要なNode型とint型を個別に宣言しようとすることは、ローカル変数宣言では無効です。

次のようなブロックを使用して、メソッド内の追加変数のスコープを制限できます。

{
  int n = 0;
  for (Object o = new Object();/* expr */;/* expr */) {
    // do something
  }
}

これにより、メソッド内の他の場所で誤って変数を再利用することがなくなります。

98
McDowell

あなたはこれを好きになれません。同じタイプの複数の変数for(Object var1 = null, var2 = null; ...)を使用するか、他の変数を抽出してforループの前に宣言します。

17
Colin Hebert

変数宣言(Node<T> currentint currentIndex)ループの外側で、動作するはずです。このようなもの

int currentIndex;
Node<T> current;
for (current = first; current != null; current = current.next, currentIndex++) {

または多分

int currentIndex;
for (Node<T> current = first; current != null; current = current.next, currentIndex++) {
9
Nikita Rybak

初期化ブロックで宣言された変数は同じ型でなければなりません

forループ内のさまざまなデータ型を設計どおりに初期化することはできません。私は小さな例を挙げています。

for(int i=0, b=0, c=0, d=0....;/*condition to be applied */;/*increment or other logic*/){
      //Your Code goes here
}
2