在循环初始化中初始化多个变量?

我想有两个不同类型的循环变量。有什么办法可以实现这个功能吗?

@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();
}
106429 次浏览

Just move variable declarations (Node<T> current, int currentIndex) outside the loop and it should work. Something like this

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

or maybe even

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

You can't like this. Either you use multiple variables of the same type for(Object var1 = null, var2 = null; ...) or you extract the other variable and declare it before the for loop.

The initialization of a for statement follows the rules for local variable declarations.

This would be legal (if silly):

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

But trying to declare the distinct Node and int types as you want is not legal for local variable declarations.

You can limit the scope of additional variables within methods by using a block like this:

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

This ensures that you don't accidentally reuse the variable elsewhere in the method.

Variables declared in the initialization block must be of same type

we can't initialize the different data types in the for loop as per their design. I'm just putting a small example.

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