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