Frage Java: Initialisierung mehrerer Variablen in for loop init?


Ich möchte zwei Loop-Variablen unterschiedlicher Typen haben. Gibt es eine Möglichkeit, dies zum Funktionieren zu bringen?

@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


Ursprung


Antworten:


Das Initialisierung von a for Aussage folgt den Regeln für lokale Variablendeklarationen.

Dies wäre legal (wenn albern):

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

Aber versuchen, das distinkte zu deklarieren Node und int Typen, wie Sie möchten, ist nicht zulässig für lokale Variablendeklarationen.

Sie können den Umfang zusätzlicher Variablen innerhalb von Methoden begrenzen, indem Sie einen Block wie diesen verwenden:

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

Dies stellt sicher, dass Sie die Variable nicht versehentlich an anderer Stelle in der Methode wiederverwenden.


89
2017-08-22 19:58



Das kann dir nicht gefallen. Entweder Sie verwenden mehrere Variablen desselben Typs for(Object var1 = null, var2 = null; ...) oder Sie extrahieren die andere Variable und deklarieren sie vor der for-Schleife.


14
2017-08-22 19:00



Verschieben Sie einfach Variablendeklarationen (Node<T> current, int currentIndex) außerhalb der Schleife und es sollte funktionieren. Etwas wie das

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

oder vielleicht sogar

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

6
2017-08-22 18:59