Quiero tener dos variables de ciclo 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();
}
first
? No se declara en ninguna parte. ¿Es un miembro de la clase?Respuestas:
La inicialización de una
for
declaración sigue las reglas para declaraciones de variables locales .Esto sería legal (aunque tonto):
for (int a = 0, b[] = { 1 }, c[][] = { { 1 }, { 2 } }; a < 10; a++) { // something }
Pero intentar declarar los tipos distintos
Node
yint
como desee no es legal para las declaraciones de variables locales.Puede limitar el alcance de las variables adicionales dentro de los métodos mediante el uso de un bloque como este:
{ int n = 0; for (Object o = new Object();/* expr */;/* expr */) { // do something } }
Esto asegura que no reutilice accidentalmente la variable en otra parte del método.
fuente
No te puede gustar esto. O usa múltiples variables del mismo tipo
for(Object var1 = null, var2 = null; ...)
o extrae la otra variable y la declara antes del ciclo for.fuente
Simplemente mueva las declaraciones de variables (
Node<T> current
,int currentIndex
) fuera del ciclo y debería funcionar. Algo como estoint 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++) {
fuente
no podemos inicializar los diferentes tipos de datos en el bucle for según su diseño. Solo estoy poniendo un pequeño ejemplo.
for(int i=0, b=0, c=0, d=0....;/*condition to be applied */;/*increment or other logic*/){ //Your Code goes here }
fuente