Chcę mieć dwie zmienne pętli różnych typów. Czy jest jakiś sposób, aby to zadziałało?
@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
? Nigdzie nie jest deklarowane. Czy to jest członek klasy?Odpowiedzi:
Inicjalizacji
for
oświadczenie następujące zasady deklaracji zmiennych lokalnych .Byłoby to legalne (jeśli głupie):
for (int a = 0, b[] = { 1 }, c[][] = { { 1 }, { 2 } }; a < 10; a++) { // something }
Ale próba zadeklarowania różnych typów
Node
iint
typów, jak chcesz, nie jest dozwolona dla lokalnych deklaracji zmiennych.Możesz ograniczyć zakres dodatkowych zmiennych w metodach, używając takiego bloku:
{ int n = 0; for (Object o = new Object();/* expr */;/* expr */) { // do something } }
Gwarantuje to, że nie przypadkowo ponownie użyjesz zmiennej w innym miejscu metody.
źródło
Nie możesz tego lubić. Albo używasz wielu zmiennych tego samego typu,
for(Object var1 = null, var2 = null; ...)
albo wyodrębniasz inną zmienną i deklarujesz ją przed pętlą for.źródło
Po prostu przenieś deklaracje zmiennych (
Node<T> current
,int currentIndex
) poza pętlę i powinno działać. Coś takiegoint currentIndex; Node<T> current; for (current = first; current != null; current = current.next, currentIndex++) {
a może nawet
int currentIndex; for (Node<T> current = first; current != null; current = current.next, currentIndex++) {
źródło
nie możemy zainicjować różnych typów danych w pętli for zgodnie z ich projektem. Podaję tylko mały przykład.
for(int i=0, b=0, c=0, d=0....;/*condition to be applied */;/*increment or other logic*/){ //Your Code goes here }
źródło