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();
}
first
? Il n'est déclaré nulle part. Est-ce un membre de la classe?Réponses:
L' initialisation d'une
for
instruction suit les règles des 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
etint
comme vous le souhaitez 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 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.
la source
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 la déclarez avant la boucle for.la source
Déplacez simplement les déclarations de variables (
Node<T> current
,int currentIndex
) en dehors de la boucle et cela devrait fonctionner. Quelque chose comme çaint 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++) {
la source
nous ne pouvons pas initialiser les différents types de données dans la boucle for selon leur conception. Je donne juste 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 }
la source