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

时间:2010-08-22 18:55:33

标签: java for-loop

我想要两个不同类型的循环变量。有没有办法让这项工作?

@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();
}

4 个答案:

答案 0 :(得分:97)

initialization of a for语句遵循local variable declarations的规则。

这是合法的(如果愚蠢):

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

但是,尝试根据需要声明不同的Nodeint类型对于局部变量声明来说是不合法的。

您可以使用如下块来限制方法中其他变量的范围:

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

这可确保您不会在方法中的其他位置意外重用该变量。

答案 1 :(得分:16)

你不能这样。要么使用相同类型的多个变量for(Object var1 = null, var2 = null; ...),要么提取另一个变量并在for循环之前声明它。

答案 2 :(得分:8)

只需将变量声明(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++) {

答案 3 :(得分:2)

  

在初始化块中声明的变量必须为同一类型

我们无法根据其设计在for循环中初始化不同的数据类型。我只是举一个小例子。

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