Wszystkie treści na stronie ir.migra.pl chronione są prawami autorskimi. Więcej informacji znajdziesz tutaj.
Zapisy podstawy programowej 2024 realizowane w temacie:
I. Rozumienie, analizowanie i rozwiązywanie problemów.
Zakres rozszerzony. Uczeń spełnia wymagania określone dla zakresu podstawowego, a ponadto:II. Programowanie i rozwiązywanie problemów z wykorzystaniem komputera i innych urządzeń cyfrowych.
- zależności od problemu rozwiązuje go, stosując metodę wstępującą lub zstępującą;
- do realizacji rozwiązania problemu dobiera odpowiednią metodę lub technikę algorytmiczną i struktury danych;
Zakres rozszerzony. Uczeń spełnia wymagania określone dla zakresu podstawowego, a ponadto:
- sprawnie posługuje się zintegrowanym środowiskiem programistycznym przy pisaniu, uruchamianiu i testowaniu programów;
Spis treści
- Środowisko programistyczne języka Java
- Pierwszy program w języku Java
- Elementy programu w języku Java
- Etapy tworzenia programu
- Błędy kompilacji w programie Java
- Stosowanie zmiennych w języku Java
- Wykonywanie obliczeń
- Wprowadzanie danych z klawiatury
- Wyprowadzanie komunikatów i wyników działania programu na ekran monitora
1. Środowisko programistyczne języka Java
Java to jeden z najpopularniejszych języków na świecie. Powstał w latach 90. XX wieku i został zaprojektowany do pracy w różnych systemach operacyjnych i na różnym sprzęcie. Jest to język programowania obiektowego. Wykorzystuje się go często w aplikacjach biznesowych.
Oprócz IDE instalowanych lokalnie na komputerze istnieją również uproszczone środowiska programistyczne dostępne w Internecie poprzez przeglądarkę internetową, np.:
- https://replit.com/languages/java10
- https://www.w3schools.com/java/tryjava.asp?filename=demo_compiler
- https://www.jdoodle.com/online-java-compiler/
W tym podręczniku będziemy korzystać z IntelliJ IDEA Community Edition.
Po zainstalowaniu IntelliJ IDEA uruchamiamy IDE, odnajdując jego ikonę w menu Start. Pokaże się wtedy powitalne okno, w którym utworzymy pierwszy projekt (rys. 2.).
Istotne jest, aby w oknie tworzenia projektu upewnić się, że wybraliśmy zainstalowany JDK (ang. Java Development Kit), czyli zestaw narzędzi do tworzenia programów w języku Java, zawierający kompilator. Jeżeli nie mamy zainstalowanego JDK, możemy go pobrać w oknie tworzenia projektu (rys. 3.) – np. EclipseTemurin 17.0.4 (rys. 4.).
Wybieramy wersję 17, ponieważ wspiera ona najnowszą wersję języka Java (LTS, and. Long Term Support).
IntelliJ IDEA umożliwia programowania w innych językach niż Java oraz korzystanie z różnych narzędzi do kompilowania plików źródłowych programów, jednak upewnijmy się, że wybranym językiem jest Java (rys. 3.) i nie zmieniajmy domyślnych ustawień.
1.1. Pierwszy program w języku Java
Program źródłowy w języku Java składa się z jednego pliku lub wielu plików z kodem źródłowym, czyli tekstem programu, o rozszerzeniu java. Wykonywanie programu zaczyna się od wywołania przez komputer metody main()
zdefiniowanej w jednym z plików źródłowych.
Przykładowy program składający się z jednego pliku z metodą main()
pokazujemy na rysunku 5. po uruchomieniu tej metody na ekranie zobaczymy komunikat “Witaj świecie!”. Wyprowadzanie danych na ekran opiszemy dokładnie w późniejszej sekcji tego tematu.
// Deklaracja klasy zawierającej metodę main
public class Program {
// Deklaracja metody main
public static void main(String[] args) {
// Przykładowa instrukcja
System.out.println("Witaj świecie!");
}
}
main()
Metoda main()
jest metodą statyczną klasy Program
. Oznacza to, że nie trzeba tworzyć instancji obiektu tej klasy, aby wywołać main()
.
W przykładowej funkcji main()
(rys. 7.) użyto komentarzy, które umieszcza się po znakach //, tak samo jak w języku C++.
Ćwiczenie 1. Tworzymy pierwszy program w języku Java
- Utwórz nowy plik źródłowy i napisz program wyświetlający na ekranie napis „Witaj świecie!” – przepisz instrukcje pokazane na rysunku 5.
- Zapisz program w pliku pod nazwą Pierwszy Projekt Java.
- Skompiluj i uruchom program. Jeśli kompilator wykrył błędy, popraw je. Zapisz program w pliku pod tą samą nazwą. Ponownie skompiluj i uruchom program.
1.2. Elementy programu w języku Java
package pl.migra.ir.java; // deklaracja pakietu
// deklaracja importująca
// dzięki niej możemy się odwołać do DayOfWeek.FRIDAY
import java.time.DayOfWeek;
// nazwa klasy (KolejnyProgram), odpowiadająca nazwie pliku
public class KolejnyProgram {
// treść (ciało) klasy – elementy składające się na klasę
// deklaracja metody main
public static void main(String[] args) {
// ciało metody
// deklaracja zmiennej i przypisanie jej wartości
int liczba = 2;
// przykładowe instrukcje
System.out.println("Pierwiastek z dwóch to: " + Math.sqrt(liczba));
System.out.println("Piątek to: " + DayOfWeek.FRIDAY);
} // koniec ciała metody
} // koniec ciała klasy
Rys. 8. Przykładowa klasa z wieloma elementami składni
Pliki z rozszerzeniem java zawierające kod źródłowy są umieszczane w katalogu src. IDE oznacza ten katalog kolorem niebieskim, wskazującym na to, że tam znajdują się źródła programu.
Plik może być wewnątrz pakietu. W takiej sytuacji na początku pliku źródłowego jest również deklaracja pakietu (rys. 8.).
pl.migra.ir.java
odpowiada podkatalogowi pl/migra/ir/java w katalogu src naszego projektu. Przyjmuje się, że nazwy pakietów zaczynają się literą i zawierają wyłącznie małe łacińskie litery i cyfry. Pakiety ułatwiają zachowanie porządku w projektach, które obejmują wiele plików z kodem źródłowym.Jeżeli w ramach programu odwołujemy się do klas albo metod zdefiniowanych w innych pakietach, należy użyć deklaracji import
, która to umożliwi.
java.lang
i nie ma potrzeby ich jawnie importować. Klasy z innych pakietów wymagają deklaracji import
.
Przykładowo możemy użyć klas System
i Math
z pakietu java.lang
w poniższy sposób bez deklaracji import
:System.out.println(Math.sqrt(2));
Plik powinien zawierać deklarację klasy publicznej – przed nazwą klasy muszą pojawić się słowa kluczowe public class.
Jej nazwa musi odpowiadać nazwie pliku. Dlatego klasę Program
zdefiniowaliśmy w pliku Program.java, a klasę KolejnyProgram
zapiszemy w pliku KolejnyProgram.java. Nazwy klas muszą zaczynać się literą, znakiem podkreślenia lub dolara, a mogą zawierać jedynie wielkie i małe litery łacińskie, cyfry oraz znaki podkreślenia i dolara. Przyjmuje się, że nazwy klas zaczynają się wielką literą, a wieloczłonowe nazwy są sklejone, np. KolejnyProgram.
Po nazwie klasy następuje nawias klamrowy oznaczający ciało klasy. Przyjmuje się stosowanie wcięć, które można wstawić automatycznie, wciskając Ctrl + Alt + L.
W ramach ciała klasy możemy zdefiniować metody, np. main
, które mogą mieć określony rodzaj dostępu (np. public
) oraz mogą być zadeklarowane jako statyczne. Deklaracja metody musi określić typ danej zwracanej przez metodę. W przypadku metody main
jest to typ void
, co oznacza brak zwracanej wartości (podobnie jak w języku C++).
Przyjmuje się, że nazwy metod są tworzone podobnie do nazw klas, z tym że zaczynają się one małą literą. W nawiasach po nazwie metody określona jest lista parametrów formalnych ( parametrów) metody. Parametry są oddzielone przecinkami, a każdy z nich jest określony typem i nazwą. W przypadku metody main()
mamy jeden parametr o typie String[]
(tablica łańcuchów znaków).
W treści („ciała”) metody możemy deklarować zmienne, przypisywać im wartości i wykonywać inne instrukcje.
Po większości deklaracji i instrukcji występuje średnik. Gdy deklaracja lub instrukcja zawiera blok (nawiasy klamrowe), średnik nie jest wymagany.
We wszystkich nazwach zmiennych, klas, metod itp. wielkie i małe litery są rozróżniane, więc np. napis
i Napis
będą oznaczać dwie różne zmienne (klasy, metody).
1.3. Etapy tworzenia programu
Kod źródłowy programu napisanego w języku Java (pliki z rozszerzeniem java) jest kompilowany do postaci pośredniej (ang. bytecode) zapisywanej jako pliki z rozszerzeniem class. To zadanie jest realizowane przez kompilator wchodzący w skład JDK. Postać pośrednia nie zawiera instrukcji wewnętrznego języka procesora i jest niezależna od rodzaju procesora, na którym będzie uruchomiony skompilowany program. W naszym projekcie pliki ze skompilowanymi źródłami znajdują się w podkatalogu /out.
Kompilacja do postaci pośredniej uda się jedynie, gdy kod źródłowy jest napisany poprawnie składniowo i będzie się poprawnie odwoływał do istniejących zmiennych, klas itp.
Nawet poprawnie skompilowany i uruchomiony program należy przetestować, aby upewnić się, że rzeczywiście rozwiązuje on zadany problem. Dlatego właśnie kolejnym etapem tworzenia programu jest testowanie. Będziemy testować nasze programy, uruchamiając je dla wielu różnych danych i samodzielnie zweryfikujemy ich wyniki.
Cały ten proces jest wspomagany przez IDE, które nie tylko pozwala na uruchomienie programu, ale również na bieżąco zaznacza błędy w pisanym programie, sugeruje kolejne jego elementy i udostępnia wiele szybkich sposobów na wykonanie częstych czynności.
Ćwiczenie 2.
W ciele metody napisz sout
i zatwierdź sugestię klawiszem Enter tak jak na rysunku 9. Możesz też podobnie napisać main
w ciele klasy.
1.4. Błędy kompilacji w programie Java
Kod źródłowy, który zawiera błędy składniowe, nie może zostać skompilowany. IDE na bieżąco sprawdza poprawność kodu i zaznacza błędy. Czasami nawet oferuje automatyczne rozwiązania.
Na rysunku 10. widać, że IDE znajduje nie tylko błędy uniemożliwiające kompilację, ale również literówki i błędy ortograficzne w komentarzach. Domyślnie IDE rozpoznaje w komentarzach wyłącznie słowa z języka angielskiego. Aby dodać polski słownik, należy kliknąć w głównym menu File/Settings/Editor/Natural Languages i dodać kolejny język – polski.
Jeżeli spróbujemy uruchomić program zawierający błędy kompilacji, również zostaniemy o nich powiadomieni w okienku Build (po wybraniu opcji Build/Build Project) – rys. 11.
Ćwiczenie 3. Poznajemy etapy tworzenia programu w języku Java
- Utwórz nowy plik źródłowy i napisz program wyświetlający na ekranie napis „Zaczynamy lekcje z programowania w języku Java!”.
- Zapisz program w pliku pod nazwą Napis.
- Skompiluj i uruchom program. Jeśli kompilator wykrył błędy, popraw je. Zapisz program w pliku pod tą samą nazwą. Ponownie skompiluj i uruchom program.
2. Stosowanie zmiennych w języku Java
Chcemy obliczyć iloczyn dwóch liczb całkowitych. Jak napisać program w języku Java umożliwiający wprowadzenie dwóch liczb całkowitych z klawiatury, obliczający ich iloczyn i wyprowadzający wynik obliczeń na ekran?
Program, który utworzyliśmy w ćwiczeniu 1., wyświetlał na ekranie napis – nie używaliśmy w nim zmiennych i nie wykonywaliśmy obliczeń. Struktura kolejnych programów będzie bardziej rozbudowana, m.in. dodamy deklarację zmiennych.
Zmienną deklarujemy, podając jej typ oraz nazwę. Nazwy zmiennych tworzymy tak samo jak nazwy metod. Zmienna, której nie nadamy wartości, jest bezużyteczna, bo odwołanie do takiej zmiennej powoduje błąd kompilacji. Z tego powodu na ogół jednocześnie z deklaracją zmiennej nadajemy jej wartość, czyli ją inicjalizujemy.
int zmienna; // zmienna typu całkowitego
zmienna = 5; // przypisanie wartości całkowitej
double zmiennaDouble = 3.02; // zmienne typu rzeczywistego
float kolejnaZmienna = 3.02F;
// zmienna przechowująca ciąg znaków
String napis = "To jest mój napis";
Rys. 12. Deklaracja zmiennych różnych typów i inicjalizacja tych zmiennych
Jak wiemy, typ zmiennej oznacza rodzaj danej, którą można zapisać w danej zmiennej. Typy double
i float
służą do przechowywania liczb rzeczywistych. Różnią się zakresem i precyzją (Java preferuje typ double
). Szczegółowe dane o typach w Javie zawarto w tabeli 1.
W praktyce najczęściej korzysta się głównie z typów boolean
, int
, double
i String
. Pozostałych typów używamy, gdy pojawi się szczególna potrzeba, np. konieczność oszczędzania pamięci albo obsługi bardzo dużych liczb.
Nazwa typu | Opis | Zakres | Deklaracja i inicjalizacja zmiennej |
boolean |
Wartość logiczna | true / false (prawda / fałsz) |
boolean zmiennaLogiczna = true; |
byte |
Liczba całkowita | 〈-128, 127〉 | byte b = -122; |
short |
〈-32768, 32767〉 | short niewielkaLiczba = 455; | |
int |
〈-231, 231-1〉 | int liczba = -5458934; | |
long |
〈-263, 263-1〉 | long duzaLiczba = 99999999999L; | |
float |
Liczba rzeczywista | 32-bitowa liczba rzeczywista | float kolejnaLiczba = 102.444F; |
double |
64-bitowa liczba rzeczywista | dobule liczbaRzeczywista = -42343.23; | |
char |
Znak | Znak Unicode | char znak = 'A’; char znakNowejLinii = '\n’; |
String |
Ciąg znaków | Ciąg znaków Unicode | String ciagZnakow = ″To jest jakiś napis″; |
2.1. Wykonywanie obliczeń
W języku Java obliczenia możemy zapisywać, korzystając z instrukcji przypisania oraz operatorów arytmetycznych. Operatory w języku Java są takie same jak w języku C++: + (dodawanie), – (odejmowanie), * (mnożenie), / (dzielenie) oraz % (reszta z dzielenia). Operator / oznacza dzielenie, w zależności od typu danych – całkowite (z obcięciem części ułamkowej) lub zmiennoprzecinkowe (z zachowaniem części ułamkowej), a operator % – obliczenie reszty z dzielenia dwóch liczb całkowitych.
Operator |
Działanie | Przykład instrukcji przypisania | Wynik działania dla danych: a = 11 i b = 4 |
+ | dodawanie | suma = a + b; | 11 + 4 = 15 |
– | odejmowanie | roznica = a – b; | 11 – 4 = 7 |
* | mnożenie | iloczyn = a * b; | 11 * 4 = 44 |
/ | dzielenie w zależności od typu danych:
|
iloraz = a / b; | 11 / 4 = 2 |
|
iloraz = a / b; | 11 / 4 = 2.75 | |
% | obliczenie reszty z dzielenia dwóch liczb całkowitych | reszta = a % b; | 11 % 4 = 3 |
2.2. Wprowadzanie danych z klawiatury
Dane z klawiatury możemy wprowadzić za pomocą obiektu klasy Scanner.
Na rysunku 13. użyto do przypisania nowego obiektu do zmiennej nazwy scanner
dla zmiennej, ale zapisano ją z małej litery (Nazwy Scanner
i scanner
to dwie różne nazwy, bo w języku Python wielkie i małe litery w nazwach traktowane są odmiennie).
package pl.migra.ir.java;
// zaimportowanie klasy Scanner
import java.util.Scanner;
public class WczytywanieZKlawiatury {
public static void main(String[] args) {
// tworzenie obiektu Scanner czytającego standardowe wejście
// przypisanie nowego obiektu do zmiennej
Scanner scanner = new Scanner(System.in);
// deklaracja dwóch zmiennych
int a, b;
// wczytanie pierwszej wartości
a = scanner.nextInt();
// wczytanie drugiej wartości
b = scanner.nextInt();
// obliczenie iloczynu
int iloczyn = a * b;
// wypisanie iloczynu na ekran
System.out.println(iloczyn);
}
}
Rys. 13. Wprowadzanie danych z klawiatury
Po uruchomieniu tego programu w IDE trzeba kliknąć w obszar wyników ekranu, żeby przenieść tam kursor i wprowadzić dane.
Klasa Scanner
może być użyta do wczytania wielu typów danych. W tym celu można skorzystać z metod podanych w tabeli 2.
Metoda | Typ zwracany | Przykładowy tekst do wpisania |
nextBoolean() |
boolean |
true |
nextByte() |
byte |
120 |
nextShort() |
short |
222 |
nextInt() |
int |
54305 |
nextLong() |
long |
-34353453 |
nextFloat() |
float |
102,22 |
nextDouble() |
double |
-203,33 |
nextLine() |
String |
Dowolny tekst w jednej linii |
Scanner
i ich działanie
Ćwiczenie 4. Stosujemy zmienne w programie
- Przepisz program z rysunku 13. Skompiluj program, uruchom go oraz przetestuj.
- Zapisz program w pliku pod nazwą Iloczyn.
- Sprawdź zachowanie programu dla poprawnych i dla niepoprawnych danych:
- zamiast liczb wpisz teksty,
- użyj bardzo dużych liczb,
- wpisz liczby rzeczywiste zamiast liczb całkowitych.
3. Wyprowadzanie komunikatów i wyników działania programu na ekran monitora
W ćwiczeniach 1., 2. i 3. wyprowadzaliśmy komunikaty na ekran monitora, używając polecenia: System.out.println("Komunikat")
.
W języku Java System
to nazwa klasy z pakietu java.lang
. Ten pakiet jest zawsze domyślnie importowany i nie trzeba tego zapisywać. System.out
to zmienna, która reprezentuje standardowe wyjście, czyli najczęściej terminal tekstowy wyświetlany na ekranie komputera. System.out.println()
to metoda, która wypisuje daną będącą parametrem metody i przechodzi do nowej linii.
Jako argument do tej metody możemy użyć dowolnego wyrażenia typu String
, boolean
, int
albo double
. Wyrażeniem może być zmienna, wynik operacji lub konkretna wartość.
Operator + (dodawanie) może być również użyty do łączenia łańcuchów znaków. Np. "Napis" + " i jego dalszy ciąg"
tworzy ciąg znaków "Napis i jego dalszy ciąg".
Podobnie gdy użyjemy tego operatora, mając po jednej stronie ciąg znaków, a po drugiej zmienną liczbową, wynikiem będzie ciąg znaków z dołączoną tekstową reprezentacją liczby. Przykładowo w wyniku da "To jest liczba 2.0".
package pl.migra.ir.java;
public class Komunikaty {
public static void main(String[] args) {
System.out.println("Komunikaty o liczbach");
int liczba = 155;
System.out.println("Liczba to: " + liczba);
int drugaLiczba = liczba + 33;
System.out.println(drugaLiczba);
System.out.println(drugaLiczba + 10);
}
}
Rys. 15. Przykładowe komunikaty wykorzystujące zmienne
Ćwiczenie 5. Dodajemy komunikaty do programu
- Do programu z ćwiczenia 3. dodaj komunikaty zachęcające do wprowadzenie liczb i prezentujące wynik.
- Zapisz plik pod tą samą nazwą.
Zadania
- Zmień program z ćwiczenia 3., aby przyjmował liczby rzeczywiste zamiast całkowitych. Zmień deklaracje zmiennych i wywoływaną metodę z obiektu
Scanner.
- Napisz program obliczający pole powierzchni prostokąta dla danych długości boków a i b, wprowadzanych z klawiatury. Po uruchomieniu programu na ekranie powinny pojawiać się w kolejnych wierszach komunikaty: „Podaj długość boku a:”, „Podaj długość boku b:”. Po podaniu danych, w trzecim wierszu powinny wyświetlić się: napis „Pole prostokąta wynosi” oraz wartość pola. Zapisz program w pliku pod nazwą Pole.
- Napisz program realizujący algorytm obliczania kwadratu i sześcianu wprowadzanej z klawiatury liczby rzeczywistej. Zapisz program w pliku pod nazwą Potegi.
- Napisz program obliczający drogę S przebytą w czasie t przez pojazd poruszający się ze średnią prędkością v. Zapisz program w pliku pod nazwą Droga.
- Otwórz plik przekazany przez nauczyciela. W pliku zapisano program zawierający błędy, pokazany na rysunku 16. Po wprowadzeniu z klawiatury liczby program powinien wyświetlić na ekranie liczbę o 2 większą od wprowadzonej. Skompiluj program. Jakie błędy pojawiły się w zapisie programu? Zmodyfikuj program, aby działał poprawnie. Zapisz ponownie plik pod tą samą nazwą, skompiluj program, uruchom go i sprawdź jego działanie.
Rys. 16. Niepoprawny program do zadania 5. - Napisz program do zadania: Jaki procent liczby a stanowi liczba b? Zapisz program w pliku pod nazwą Procenty. Dla zainteresowanych
- Dane są suma i iloczyn dwóch liczb całkowitych. Napisz program znajdujący te liczby. Zapisz program w pliku pod nazwą Liczby.