Pregunta Java: Inicializa múltiples variables en for loop init?


Quiero tener dos variables de bucle de diferentes tipos. ¿Hay alguna manera de hacer funcionar esto?

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

75
2017-08-22 18:55


origen


Respuestas:


los inicialización de un for declaración sigue las reglas para declaraciones de variables locales.

Esto sería legal (si es tonto):

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

Pero tratando de declarar el distinto Node y int los tipos que desee no son legales para las declaraciones de variables locales.

Puedes limitar el alcance de las variables adicionales dentro de los métodos usando un bloque como este:

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

Esto garantiza que no vuelva a utilizar accidentalmente la variable en ningún otro lugar del método.


89
2017-08-22 19:58



No te puede gustar esto O usas múltiples variables del mismo tipo for(Object var1 = null, var2 = null; ...) o extrae la otra variable y la declara antes del ciclo for.


14
2017-08-22 19:00



Simplemente mueva declaraciones variables (Node<T> current, int currentIndex) fuera del circuito y debería funcionar. Algo como esto

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

o tal vez incluso

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

6
2017-08-22 18:59