Strona główna › Pytania INF.03 › Pytanie 342
INF.03 · pytanie #342
Kod JavaScript ma za zadanie szukanie wartości maksymalnej w tablicy. Wskaż błąd występujący w skrypcie. <pre class="code-block"> 14 max = tablica[0]; 15 for (j == 1; j < 9; j++) { 16 if (max <= tablica[j]) { 17 max = tablica[j]; 18 }; 19 }; 20 document.write("Największy element tablicy to: " + max);</pre>
- AKod zapisany w linii 20 ma nieprawidłową składnię.
- BWarunek w linii 16 powinien być odwrócony.
- CZastosowano operator porównania zamiast przypisania w linii 15.
- DZmienna max ma niewłaściwie przypisaną wartość w linii 14.
Poprawna odpowiedź: C. Zastosowano operator porównania zamiast przypisania w linii 15.
Kliknij odpowiedź, którą uważasz za poprawną.
Wyjaśnienie
W tym fragmencie kodu kluczowy problem faktycznie leży w linii 15, gdzie użyto operatora porównania `==` zamiast operatora przypisania `=`. W pętli `for` pierwsza część ma inicjalizować zmienną sterującą, czyli w JavaScripcie poprawny zapis to `for (j = 1; j < 9; j++) { ... }`. Konstrukcja `j == 1` nie ustawia wartości zmiennej, tylko porównuje bieżącą wartość `j` z liczbą 1 i zwraca wynik logiczny `true` lub `false`. W efekcie interpreter próbuje potraktować wynik porównania jako wyrażenie inicjalizujące, co jest po prostu błędem składniowym i skrypt się nie wykona. Z mojego doświadczenia to bardzo częsty błąd: programista myśli o „ustawieniu” wartości i z przyzwyczajenia wpisuje podwójny znak równości. Dlatego w językach takich jak JavaScript, C, Java trzeba mocno pilnować rozróżnienia: `=` oznacza przypisanie, `==` porównanie wartości (a `===` porównanie wartości i typu). Cała reszta algorytmu wyszukiwania maksimum jest w porządku: najpierw przypisujemy do `max` pierwszy element tablicy, potem w pętli przechodzimy kolejne elementy i jeśli aktualny element jest większy lub równy `max`, to aktualizujemy zmienną `max`. Taki schemat jest klasycznym algorytmem liniowego wyszukiwania wartości maksymalnej. W praktyce, gdy piszesz kod produkcyjny, warto dodatkowo zadbać o deklarację zmiennych (`let j = 1;`, `let max = tablica[0];`) oraz używać długości tablicy (`j < tablica.length`) zamiast stałej liczby 9, żeby kod był odporny na zmiany i łatwiejszy w utrzymaniu. W narzędziach typu ESLint często jest też reguła wychwytująca przypadkowe użycie `==` tam, gdzie spodziewane jest `=`, właśnie po to, żeby unikać takich subtelnych, ale groźnych pomyłek.
🤖 Wyjaśnienie generowane przez AI – weryfikuj w oficjalnych źródłach.