web-dev-qa-db-fra.com

Java: initialiser plusieurs variables dans for loop init?

Je veux avoir deux variables de boucle de types différents. Y a-t-il un moyen de faire fonctionner cela?

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

L’instruction initialisation de for suit les règles pour déclarations de variables locales .

Ce serait légal (si idiot):

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

Mais essayer de déclarer les types distincts Node et int comme vous le souhaitez n’est pas légal pour les déclarations de variables locales.

Vous pouvez limiter la portée de variables supplémentaires dans les méthodes en utilisant un bloc comme celui-ci:

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

Cela garantit que vous ne réutilisez pas accidentellement la variable ailleurs dans la méthode.

98
McDowell

Vous ne pouvez pas aimer ça. Soit vous utilisez plusieurs variables du même type for(Object var1 = null, var2 = null; ...), soit vous extrayez l’autre variable et vous la déclarez avant la boucle for.

17
Colin Hebert

Il suffit de déplacer les déclarations de variables (Node<T> current, int currentIndex) en dehors de la boucle et cela devrait fonctionner. Quelque chose comme ça

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

ou peut-être même

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

Les variables déclarées dans le bloc d'initialisation doivent être du même type

nous ne pouvons pas initialiser les différents types de données dans la boucle for selon leur conception. Je ne fais que donner un petit exemple.

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