Kolokwia i egzaminy

Co wypisze program? Jak ćwiczyć to zadanie z Javy na kolokwium

Opublikowano 22 października 20265 min czytania

Na kartce z kolokwium jest krótki program w Javie, a pod nim pytanie: „Co wypisze program?”. Czytasz kod, wygląda niewinnie, a mimo to na końcu jedna linijka się nie zgadza. To zadanie wraca na sprawdzianach w szkole, w technikum i na kolokwiach na studiach. Tutaj nauczysz się rozwiązywać je krok po kroku, poznasz pułapki, które prawie zawsze się w nim kryją, i dowiesz się, jak je celowo ćwiczyć.

Dlaczego to zadanie kosztuje tyle punktów

Gdy programujesz przy komputerze, to komputer mówi ci, jaki jest wynik. Na kolokwium to ty jesteś komputerem. To inna umiejętność niż pisanie kodu: musisz wykonać każdą linijkę dokładnie tak, jak wykonuje ją Java, a nie tak, jak byś chciał.

Większość błędów nie bierze się z tego, że ktoś nie rozumie pętli. Bierze się ze skrótów w głowie. „Widzisz”, że pętla wykona się cztery razy, i nie liczysz już ostatniego przebiegu. Albo przeoczysz, że 7 / 2 w Javie daje 3. Właśnie te szczegóły sprawdza to zadanie.

Jak to robić: krok po kroku

  1. Zacznij od main. Tam startuje program. Metody nad nim wykonują się dopiero wtedy, gdy ktoś je wywoła.
  2. Narysuj tabelę śledzenia. Każda zmienna dostaje kolumnę, każda zmiana nowy wiersz.
  3. Wykonuj każdą linijkę osobno. Bez skrótów, także przy trzecim przebiegu pętli.
  4. Od razu zapisuj wynik. Uważaj na print (bez przejścia do nowej linii) i println (z przejściem).
  5. Na końcu sprawdź spacje i linie. Brakująca spacja w i + " " + j może kosztować punkt.

Przykład z tabelą śledzenia

public class Main {    public static void main(String[] args) {        int x = 1;        for (int i = 0; i < 4; i++) {            x = x * 2 + i;        }        System.out.println(x);    }}

Tak wygląda tabela. Warunek i < 4 sprawdzasz przed każdym przebiegiem:

ii < 4?x po przebiegu
––1
0tak1 · 2 + 0 = 2
1tak2 · 2 + 1 = 5
2tak5 · 2 + 2 = 12
3tak12 · 2 + 3 = 27
4niekoniec pętli
27

Na początku tabela wydaje się powolna. Na kolokwium jest szybsza niż druga próba, bo błąd znajdujesz od razu. Jeśli przebieg pętli for i while nie jest dla ciebie jeszcze oczywisty, najpierw przeczytaj artykuł o pętlach w Javie.

Pułapki, które prawie zawsze się pojawiają

Autorzy zadań lubią wstawiać miejsca, w których kod działa inaczej, niż wygląda. Większość należy do jednej z tych grup.

Dzielenie całkowite i łączenie Stringów

public class Main {    public static void main(String[] args) {        int a = 7;        int b = 2;        System.out.println(a / b);        System.out.println(a % b);        System.out.println(a / 2.0);        System.out.println("Sum: " + a + b);        System.out.println(a + b + " is the sum");    }}
3
1
3.5
Sum: 72
9 is the sum
  • 7 / 2 na dwóch int obcina część ułamkową i daje 3. Dopiero z 2.0 Java liczy na liczbach zmiennoprzecinkowych.
  • + jest obliczany od lewej do prawej. Jeśli po lewej stoi już String, wszystko dalej jest doklejane: "Sum: " + 7 daje "Sum: 7", potem dochodzi 2. W ostatniej linijce Java najpierw liczy 7 + 2, bo po lewej nie ma jeszcze Stringa.

Stringi się nie zmieniają, tablice tak

public class Main {    static void change(int n, int[] values) {        n = 99;        values[0] = 99;    }
    public static void main(String[] args) {        String s = "Java";        s.toUpperCase();        System.out.println(s);
        int i = 5;        int j = i++ + ++i;        System.out.println(i + " " + j);
        int n = 1;        int[] values = {1, 2};        change(n, values);        System.out.println(n + " " + values[0]);    }}
Java
7 12
1 99
  • s.toUpperCase() zwraca nowy String, a s dalej jest "Java". Więcej w artykule o Stringach w Javie.
  • i++ najpierw zwraca starą wartość (5), a potem zwiększa do 6. ++i najpierw zwiększa do 7 i zwraca 7. Czyli j = 5 + 7 = 12, a i = 7.
  • Metoda dostaje przy int kopię wartości. Przy tablicy dostaje referencję do tej samej tablicy. Dlatego n zostaje 1, a values[0] zmienia się na 99. Jak dokładnie działają parametry, opisuje artykuł o metodach i rekurencji.

Inne klasyki

  • Granice pętli: i < 5 czy i <= 5? Zawsze policz pierwszy i ostatni przebieg.
  • Warunki bez klamer: po if (x > 3) bez nawiasów klamrowych do if należy tylko następna instrukcja. Zobacz instrukcje warunkowe w Javie.
  • switch bez break: jeśli brakuje break, kod przechodzi dalej do kolejnych przypadków.
  • Rekurencja: każde wywołanie zapisz w osobnym wierszu i licz z powrotem od dołu do góry.

Jak dobrze ćwiczyć

Samo czytanie kodu nie wystarczy. Działa stały schemat:

  1. Najpierw przewiduj. Zapisz cały wynik, zanim cokolwiek uruchomisz.
  2. Potem porównaj. Uruchom program i porównaj linijka po linijce.
  3. Nazwij błąd. Dzielenie całkowite, jeden przebieg za dużo, i++? Zanotuj to. Po kilku zadaniach zobaczysz, która pułapka łapie cię najczęściej.
  4. Zmieniaj kod. Zamień < na <= albo i++ na ++i i przewidź nowy wynik.
  5. Ćwicz na papierze. Na kolokwium nie masz komputera. Jak się do tego przygotować, opisuje wpis Kolokwium z Javy na kartce.

Kolejność jest kluczowa. Kto najpierw uruchamia, a potem „analizuje”, trenuje tylko rozpoznawanie. ChatGPT może ci wyjaśnić wynik, ale przewidzieć musisz go sam. Jak sensownie używać przy tym AI, przeczytasz we wpisie Nauka Javy z ChatGPT.

Zadania „Co wypisze program?” w Jario

W Jario są osobne zadania typu „Co wypisze program?”. Widzisz program, wpisujesz swoją odpowiedź, a potem porównujesz ją z prawdziwym wynikiem. To dokładnie pasuje do schematu powyżej: najpierw myślisz, potem sprawdzasz.

Do tego dochodzi edytor w przeglądarce. Możesz wkleić do niego każdy przykład z tego wpisu, zmienić jedną linijkę i przyciskiem „Uruchom” od razu zobaczyć, co się stanie. Nie musisz niczego instalować. Jeśli nie rozumiesz, dlaczego wynik różni się od oczekiwanego, tutor AI daje wskazówkę małymi krokami, zamiast podawać gotową odpowiedź. Zadania mają poziomy od „Łatwe” do „Trudne”, a pierwsze dwa rozdziały są dostępne z darmowym kontem.

Jakie tematy ćwiczyć i w jakiej kolejności, żeby żadna pułapka cię nie zaskoczyła, pokazuje wpis Nauka Javy w dobrej kolejności.

W skrócie

  • Zacznij od main i wykonuj każdą linijkę osobno.
  • Używaj tabeli śledzenia, zwłaszcza przy pętlach.
  • Uważaj na dzielenie całkowite, łączenie Stringów, i++ i ++i, granice pętli i referencje do tablic.
  • Ćwicz zawsze w tej kolejności: przewiduj, uruchom, porównaj, nazwij błąd.

Powiązane artykuły do nauki

Więcej wpisów