Java: инициализировать несколько переменных для цикла init?
Я хочу иметь две переменные цикла разных типов. Есть ли способ сделать эту работу?
@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();
}
Ответы
Ответ 1
инициализация оператора for
следует правилам local объявления переменных.
Это будет законным (если глупо):
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
}
}
Это гарантирует, что вы случайно не будете повторно использовать переменную в другом месте метода.
Ответ 2
Вам это не понравится. Либо вы используете несколько переменных одного и того же типа for(Object var1 = null, var2 = null; ...)
, либо вы извлекаете другую переменную и объявляете ее перед циклом for.
Ответ 3
Просто переместите объявления переменных (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++) {