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
- Tablice w języku Java
- Deklarowanie zmiennych przechowujących tablice
- Tworzenie i inicjalizowanie tablic
- Dostęp do elementów tablicy
- Tablice wielowymiarowe
1. Tablice w języku Java
W języku Java odpowiednikiem zmiennej indeksowanej są tablice.
Podobnie jak w języku C++, tablice w języku Java przed użyciem należy zadeklarować i utworzyć. Do elementów tablicy można się odwołać, wykorzystując nawiasy kwadratowe. Indeksy elementów tablicy zaczynają się od zera.
Tablica ciągów znaków jest parametrem metody main()
, której używaliśmy w poprzednich tematach.
Przykład 1. Program prezentujący tablice w języku Java
// plik tablice.java
package pl.migra.ir.java;
public class Tablice {
// metoda main z parametrem typu tablicy ciągów znakowych
public static void main(String[] args) {
int[] pierwszaTablica; // deklaracja zmiennej przechowującej tablicę
pierwszaTablica = new int[10]; // utworzenie tablicy z 10 elementami o domyślnych wartościach
pierwszaTablica[5] = 7; // przypisanie wartości elementowi tablicy
wypiszTablice(pierwszaTablica); // wypisanie zawartości tablicy
// deklaracja zmiennej przechowującej tablicę, nawias za nazwą zmiennej
// oraz jednoczesne utworzenie tablicy z elementami o podanych wartościach
int drugaTablica[];
drugaTablica = new int[] {1, 2, 3};
wypiszTablice(drugaTablica);
// deklaracja zmiennej przechowującej tablicę
// oraz jednoczesne utworzenie tablicy z elementami o podanych wartościach
int[] trzeciaTablica = {1, 2, 3, 4, 10};
wypiszTablice(trzeciaTablica);
}
// metoda wypisująca zawartość tablicy na ekran
private static void wypiszTablice(int[] tablica) {
int liczbaElementow = tablica.length; // odczytanie liczby elementów tablicy
for (int i = 0; i < liczbaElementow; i++) {
int elementTablicy = tablica[i]; // odczytanie elementu tablicy
System.out.print(elementTablicy + " ");
}
System.out.println(); // przejście do nowej linii po wypisaniu elementów tablicy
}
}
Ćwiczenie 1. Poznajemy stosowanie tablic w języku Java
- Otwórz projekt Tablice, w którym zapisano wszystkie programy potrzebne do rozwiązania ćwiczeń z tematu C8.
- Otwórz plik Tablice.java. Skompiluj i uruchom program.
- Wyjaśnij, co się dzieje w poszczególnych częściach programu. Zapisz treść zadania realizowanego przez program, wymień również zadania cząstkowe, które są realizowane przez poszczególne metody.
2. Deklarowanie zmiennych przechowujących tablice
Tablice w języku Java można zadeklarować na dwa sposoby różniące się pozycją nawiasów kwadratowych.
Deklaracja zmiennej | Przykład | |
Sposób 1. | typ[] nazwaZmiennej; | int[] pierwszaTablica; |
Sposób 2. | typ nazwaZmiennej[]; | int drugaTablica[]; |
Oba sposoby realizują dokładnie to samo zadanie, ale częściej używa się pierwszego, ponieważ jest czytelniejszy. Drugi sposób jest taki sam jak metoda znana z języka C++. IDE podpowiada automatyczną zmianę na pierwszy sposób (rys. 1.).
3. Tworzenie i inicjalizowanie tablic
Podobnie jak w przypadku innych zmiennych, zmiennej przechowującej tablicę należy nadać wartość. Oznacza to zarezerwowanie pamięci na wszystkie elementy tablicy. Można to zrobić na wiele sposobów.
Deklaracja i utworzenie tablicy 10 liczb całkowitych z elementami o domyślnych wartościach. Drugą instrukcję można również połączyć w jedną instrukcję z deklaracją. | int[] pierwszaTablica; pierwszaTablica = new int[10]; |
Deklaracja i utworzenie tablicy z elementami o podanych wartościach. Liczba elementów tablicy zostanie ustalona na podstawie tych wartości. Drugą instrukcję można również połączyć w jedną instrukcję z deklaracją. | int[] drugaTablica; drugaTablica = new int[] {1, 2, 3}; |
Skrócona postać deklaracji i utworzenie tablicy z zadanymi wartościami. Nie można ich w tej formie rozdzielić. | int[] trzeciaTablica = {1, 2, 3, 4, 10}; |
Jeżeli tablicę utworzono bez podawania wartości elementów, to ich początkowa wartość jest równa:
- zero – dla typów liczbowych,
false
– dla typu logicznegoboolean
.
length
tablice przechowują swój rozmiar, więc nie ma konieczności przechowywania go w dodatkowej zmiennej.
Rozmiar tablicy ustalamy podczas jej tworzenia i nie można go później zmienić. Można natomiast przypisać do zmiennej nową tablicę tego samego typu, ale innego rozmiaru.
int liczbaElementow = tablica.length;
Tablice są indeksowane od zera (podobnie jak w językach C++ i Python), co oznacza, że dla tablicy t
będą istnieć elementy o indeksach od 0 aż do t.length-1
włącznie.
Ćwiczenie 2. Inicjalizujemy dużą tablicę
- Napisz program, który utworzy tablicę zawierającą liczby całkowite od 1 do 100. Do inicjalizacji wartości elementów użyj pętli
for
. - Czy da się użyć w tym celu innego sposobu nadania wartości elementom tablicy? Czy jest to wygodne?
- Zmień program tak, aby tablica zawierała liczby od 1 do n, gdzie n jest wczytywane z klawiatury.
4. Dostęp do elementów tablicy
Po utworzeniu możemy odczytać wartości elementów tablicy oraz przypisać im nowe wartości. Aby odwołać się do konkretnego elementu tablicy, należy użyć nawiasów kwadratowych.
Odczyt elementu tablicy | int elementTablicy = tablica[i]; |
Zapis nowej wartości do elementu tablicy | pierwszaTablica[5] = 7; |
Częstą operacją jest iterowanie po elementach tablicy. Taka operacja jest wykorzystywana w metodzie wyprowadzającej wartości elementów tablicy na ekran.
// metoda wypisująca zawartość tablicy na ekran
private static void wypiszTablice(int[] tablica) {
// odczytanie liczby elementów tablicy
int liczbaElementow = tablica.length;
for (int i = 0; i < liczbaElementow; i++) {
// odczytanie elementu tablicy
int elementTablicy = tablica[i];
System.out.print(elementTablicy + " ");
}
// przejście do nowej linii po wypisaniu elementów tablicy
System.out.println();
}
IDE podpowiada inną postać pętli for
, która realizuje to samo zadanie bez użycia nawiasów kwadratowych i indeksów. Jest to forma pętli bardzo podobna do tej znanej z języka Python.
// metoda wypisująca zawartość tablicy na ekran
private static void wypiszTablice(int[] tablica) {
// odczytanie liczby elementów tablicy
for (int elementTablicy : tablica) {
// odczytanie elementu tablicy
System.out.print(elementTablicy + " ");
}
// przejście do nowej linii po wypisaniu elementów tablicy
System.out.println();
}
Kiedy w wyniku błędu w programie spróbujemy się odwołać do elementu tablicy o indeksie spoza przedziału ⟨0; rozmiar_tablicy-1⟩, program zakończy działanie i wyświetli komunikat o błędzie.
Ćwiczenie 3. Modyfikujemy elementy tablicy
- Otwórz plik Tablice.java.
- Dodaj metodę przyjmującą tablicę jako parametr i zwiększającą każdy jej element o 1.
- Użyj dodanej metody i sprawdź jej działanie dla różnych tablic.
5. Tablice wielowymiarowe
Podobnie jak w innych językach programowania, w języku Java można definiować wielowymiarowe tablice. W takim wypadku przy deklaracji dostawiamy więcej niż jedną parę nawiasów kwadratowych.
Przykład 2. Deklarowanie tablicy dwuwymiarowej
// deklaracja i stworzenie tablicy
String[][] tablicaZDomslnymiWartosciami = new String[3][3];
// wyprowadzenie wartości elementu na ekran
System.out.println(tablicaZDomslnymiWartosciami[0][1]);
// ustawienie wartości
tablicaZDomslnymiWartosciami[0][1] = "wartość";
// ponowne wyprowadzenie wartości elementu na ekran
System.out.println(tablicaZDomslnymiWartosciami[0][1]);
W przykładzie 2. tworzymy tablicę dwuwymiarową o wymiarach 3 X 3, która może przechowywać ciągi znaków, czyli obiekty String
. Obiekty nie posiadają wartości domyślnej, więc wszystkie elementy tablicy będą miały wartość null,
co oznacza brak obiektu. W przykładzie ustawiamy również wartość jednego z elementów tablicy i wyświetlamy ją na ekranie.
Przykład 3. Deklarowanie tablicy z podanymi wartościami
// deklaracja i stworzenie tablicy z podanymi wartościami
String[][] roznejDlugosciWiersze = {
{"A0", "A1", "A2"},
{"B0", "B1", "B2", "B3"},
{"C0", "C1", "C2", "C3", "C4"},
{},
{"E0"}
};
for(String[] wiersz : roznejDlugosciWiersze) {
wypiszTabliceJednowymiarowa(wiersz);
}
Tablice wielowymiarowe są w istocie tablicami, których wartościami są inne tablice. Dlatego też ich „wiersze” mogą mieć różne długości. Można się również odwoływać do pojedynczych „wierszy” takiej tablicy, jak w przykładzie 3. Zauważmy, że jeden z wierszy tablicy jest tablicą o długości 0, czyli pustą tablicą. Deklarując tablice wielowymiarowe i inicjalizując ich wartości, warto pamiętać o formatowaniu kodu w taki sposób, aby na pierwszy rzut oka można było zorientować się co do ich struktury („kształtu”).
W przykładzie 3. wykorzystujemy metodę pomocniczą do wyprowadzenia tablicy jednowymiarowej na ekran, którą przedstawiamy w przykładzie 4.
Przykład 4. Wyprowadzenie tablicy jednowymiarowej na ekran
// metoda wypisująca zawartość tablicy na ekran
private static void wypiszTabliceJednowymiarowa(String[] tablica) {
System.out.println(String.join(" ", tablica));
}
W przykładzie 4. wykorzystujemy przydatną metodę statyczną join
z klasy String
, która tworzy ciąg znaków, łącząc ciągi będące elementami podanej tablicy (drugi argument) i dodatkowo rozdzielając je podanym ciągiem znaków (pierwszy argument). Tę metodę można również stosować, podając ciągi znaków do złączenia jako oddzielne argumenty, jak pokazano poniżej:
String.join("-", "Łączenie", "różnych", "napisów")
Wynikiem tego wywołania będzie ciąg znaków "Łączenie-różnych-napisów".
Ćwiczenie 4. Poznajemy stosowanie tablic wielowymiarowych w języku Java
- Otwórz plik TabliceWielowymiarowe.java. Skompiluj i uruchom program.
- Wyjaśnij, co się dzieje w poszczególnych częściach programu. Zapisz treść zadania realizowanego przez ten program, w tym wymień zadania cząstkowe realizowane przez poszczególne metody.
Aby dowiedzieć się więcej o metodach oraz innych elementach, można skorzystać z dokumentacji prezentowanej w IDE. Wystarczy, trzymając kursor w nazwie metody, nacisnąć Ctrl + Q – IDE zaprezentuje okienko z dokumentacją w języku angielskim.
Zadania
- Napisz program, który umożliwi wprowadzenie dziesięciu liczb rzeczywistych i wyprowadzenie ich w kolumnie na ekranie, ale w odwrotnej kolejności.
- Napisz program, który wczytuje liczby całkowite do tablicy ośmioelementowej, a wypisuje na ekran indeks elementu tablicy lub listy, którego wartość wynosi zero. Jeśli nie ma takiego elementu, program powinien wyświetlić komunikat „brak elementu zerowego”.
- Napisz program obliczający sumę elementów umieszczonych na głównej przekątnej tablicy (elementy tablica[0][0], tablica[1][1], tablica[2][2] itd.) składającej się z 5×5 liczb całkowitych. Dla zainteresowanych
- Z ciągu n liczb naturalnych wypisz liczby, których suma cyfr jest większa od 100. W programie wykorzystaj metodę sumaCyfr(liczba), która obliczy sumę cyfr liczby podanej jako parametr. W celu obliczenia wartości cyfry skorzystaj z możliwości obliczenia reszty z dzielenia przez 10.
- Napisz program, który wyświetli „tabliczkę mnożenia” dla liczb naturalnych z zakresu ⟨1; 10⟩. Zastosuj tablicę dwuwymiarową.
- Napisz program do gry w kółko i krzyżyk. Zastosuj dwuwymiarową tablicę ciągów znaków.