106 votes

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

Merci

121voto

McDowell Points 62645

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

Ce serait légal (si stupide):

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

Mais en essayant de déclarer l'distinctes Node et int types que vous voulez n'est pas légal pour les déclarations de variables locales.

Vous pouvez limiter la portée des variables supplémentaires dans les méthodes à l'aide d'un bloc comme ceci:

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

Cela garantit que vous ne l'avez pas accidentellement réutiliser la variable ailleurs dans la méthode.

22voto

Colin Hebert Points 40084

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.

12voto

Nikita Rybak Points 36641

Il suffit de déplacer les déclarations de variable ( 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++) {
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X