異なるタイプの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();
}
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
}
}
これにより、メソッド内の他の場所で誤って変数を再利用することがなくなります。
あなたはこれを好きになれません。同じタイプの複数の変数for(Object var1 = null, var2 = null; ...)
を使用するか、他の変数を抽出してforループの前に宣言します。
変数宣言(Node<T> current
、int 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++) {
初期化ブロックで宣言された変数は同じ型でなければなりません
forループ内のさまざまなデータ型を設計どおりに初期化することはできません。私は小さな例を挙げています。
for(int i=0, b=0, c=0, d=0....;/*condition to be applied */;/*increment or other logic*/){
//Your Code goes here
}