Java: инициализировать несколько переменных для цикла инициализации? - PullRequest
82 голосов
/ 22 августа 2010

Я хочу иметь две переменные цикла разных типов. Есть ли способ заставить эту работу?

@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 ]

98 голосов
/ 22 августа 2010

Инициализация оператора 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
  }
}

Это гарантирует, что вы не сможете случайно использовать переменную в другом месте метода.

17 голосов
/ 22 августа 2010

Тебе это не может понравиться. Либо вы используете несколько переменных одного типа for(Object var1 = null, var2 = null; ...), либо извлекаете другую переменную и объявляете ее перед циклом for.

9 голосов
/ 22 августа 2010

Просто переместите объявления переменных (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++) {
2 голосов
/ 28 октября 2018

Переменные, объявленные в блоке инициализации, должны быть одного типа

мы не можем инициализировать различные типы данных в цикле for согласно их дизайну. Я просто привожу небольшой пример.

for(int i=0, b=0, c=0, d=0....;/*condition to be applied */;/*increment or other logic*/){
      //Your Code goes here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...