Spis treści
W rozdziale o instrukcjach warunkowych zaczęliśmy mówić o zakresie zmiennych.
W poniższym przykładzie, w instrukcji inicjalizującej pętli for, definiujemy zmienną o nazwie i. Czy ten program skompiluje się bez błędów?
public class WypiszLiczbyOd1Do5ForZakresZmiennej { public static void main(String[] args) { for (int i = 1; i <= 5; i++) { System.out.println(i); } System.out.println("Po ukonczeniu petli i = " + i); } }
Powyższy program jest niepoprawny, ponieważ zmienna i jest niedostępna po zakończeniu działania pętli – została ona zdefiniowana w ramach pętli for i tylko w niej jest dostępna. Zakres zmiennej i to jedynie ciało pętli for. Po wyjściu z pętli, zmienna o nazwie i przestaje istnieć.
Kompilator wypisze następujący błąd podczas próby kompilacji:
Aby kod zadziałał, musielibyśmy zdefiniować zmienną i przed wykonaniem pętli.
Ta sama zasada odnosi się do zmiennych definiowanych w ciałach pętli while, do...while, for, w instrukcjach warunkowych if, oraz ogólnie w blokach kodu.
Aby kod zadziałał, musielibyśmy zdefiniować zmienną i przed wykonaniem pętli.
Po wykonaniu pętli, nie przed
Idea jest taka, żeby wyświetlić wartość zmiennej
i
po tym, jak zakończy się pętla. Dlatego zmiennai
powinna być zdefiniowana przed pętlą, aby można z niej było skorzystać zarówno w pętli, jak i wypisać jej wartość po zakończeniu działania pętli, za pomocąSystem.out.println
.taki zapis nam to umozliwia:
public class WypiszLiczbyOd1Do5ForZakresZmiennej {
public static void main(String[] args) {
int i = 1;
for ( i = 1; i < 5; i++) {
System.out.println(i);
}
System.out.println("Wypisz wartość i: " + i);
}
}
Napisane chyba poprawnie?
W zasadzie tak, ale inicjalizacja zmiennej
i
w pętli nie jest potrzebna, bo przypisujesz do niej wartość1
w momencie jej definicji. Można więc napisać: