我想要两个不同类型的循环变量。有没有办法让这项工作?
@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();
}
答案 0 :(得分:97)
initialization of a for
语句遵循local variable declarations的规则。
这是合法的(如果愚蠢):
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
}
}
这可确保您不会在方法中的其他位置意外重用该变量。
答案 1 :(得分:16)
你不能这样。要么使用相同类型的多个变量for(Object var1 = null, var2 = null; ...)
,要么提取另一个变量并在for循环之前声明它。
答案 2 :(得分:8)
只需将变量声明(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++) {
答案 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
}