Rozdział 5 - Pętle - Zakres zmiennych w pętlach

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?

Nazwa pliku: WypiszLiczbyOd1Do5ForZakresZmiennej.java
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:

WypiszLiczbyOd1Do5ForZakresZmiennej.java:7: error: cannot find symbol System.out.println("Po ukonczeniu petli i = " + i); ^ symbol: variable i location: class WypiszLiczbyOd1Do5ForZakresZmiennej 1 error

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.

Komentarze (4):

    1. Idea jest taka, żeby wyświetlić wartość zmiennej i po tym, jak zakończy się pętla. Dlatego zmienna i 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.

    2. 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?

      1. 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ć:

        public class WypiszLiczbyOd1Do5ForZakresZmiennej {
          public static void main(String[] args) {
            int i = 1;
            for (; i < 5; i++) {
              System.out.println(i);
            }
            System.out.println("Wypisz wartość i: " + i);
          }
        }

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Nie musisz podawać swojego imienia, e-mailu, ani strony www, aby opublikować komentarz. Komentarze muszą zostać zatwierdzone, aby były widoczne na stronie.