Struktury w języku Java

Przypomnijmy, jak wygląda struktura danych w języku Java:

Linia 1. class Struktura otwórz nawias klamrowy. Linia 2. public int pole1 średnik. Linia 3. public String pole2 średnik. Linia 4. zamknij nawias klamrowy.

Struktura nosi nazwę Struktura, a w środku ma dwa pola, czyli części składowe – pole1 typu int oraz pole2 typu String. Słowo public jest wymagane, abyśmy mogli uzyskać dostęp do pól spoza struktury. Możemy to osiągnąć za pomocą bardzo prostej składni.

Stwórzmy instancjęinstancja typuinstancję struktury i zmieńmy wartości jej pól.

Linia 1. Struktura struktura znak równości new Struktura otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 2. struktura kropka pole1 znak równości 15 średnik. Linia 3. struktura kropka pole2 znak równości cudzysłów słowo cudzysłów średnik.

Analogicznie możemy wypisać wartości tych pól:

Linia 1. Struktura struktura znak równości new Struktura otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 2. struktura kropka pole1 znak równości 15 średnik. Linia 3. struktura kropka pole2 znak równości cudzysłów słowo cudzysłów średnik. Linia 5. System kropka out kropka println otwórz nawias okrągły struktura kropka pole1 zamknij nawias okrągły średnik. Linia 6. System kropka out kropka println otwórz nawias okrągły struktura kropka pole2 zamknij nawias okrągły średnik.

Wartości początkowe pól

Do tej pory wszystkim polom struktur nadawaliśmy wartości ręcznie. Co  zrobić, gdy chcemy ustawić polom struktury początkowe wartości?

Wystarczy skorzystać ze składni znanej z inicjalizacji zmiennych.

Linia 1. class Struktura otwórz nawias klamrowy. Linia 2. public int a znak równości 5 średnik. Linia 3. zamknij nawias klamrowy.

Struktura ma teraz jedno pole o typie liczby całkowitej. Jeżeli stworzymy jej instancję i nie przypiszemy nowej wartości do tego pola, będzie ono miało podaną przez nas wartość. Przykładowo dla kodu:

Linia 1. class Struktura otwórz nawias klamrowy. Linia 2. public int a znak równości 5 średnik. Linia 3. zamknij nawias klamrowy. Linia 5. public class Main otwórz nawias klamrowy. Linia 6. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. Struktura struktura znak równości new Struktura otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 8. System kropka out kropka println otwórz nawias okrągły struktura kropka a zamknij nawias okrągły średnik. Linia 9. zamknij nawias klamrowy. Linia 10. zamknij nawias klamrowy.

Program zwróci na wyjściu:

Linia 1. 5.
Ważne!

Wartości domyślne możemy ustawiać dla wszystkich typów – nie tylko typów liczbowych. Mogą to być zarówno zmienne logiczne, liczbowe czy bardziej zaawansowane, jak np. tablice. Dodatkowo jeżeli podajemy wartość domyślną dla jednego pola, nie oznacza to, że musimy podać ją dla wszystkich pozostałych. Struktura z dziesięcioma polami, w której wartość domyślną ma tylko pierwsze z nich, jest jak najbardziej poprawna.

Użycie struktur w praktyce

Spójrzmy na przykładowe zadanie, jakie możemy rozwiązać za pomocą struktur. Mamy tablicę dziesięciu budynków, a każdy z nich jest opisany dwoma zmiennymi całkowitymi – odpowiednio odciętą i rzędną jego pozycji. Naszym zadaniem jest napisanie programu, który policzy odległości między budynkiem pierwszym i piątym, a także trzecim i siódmym.

Zacznijmy od stworzenia struktury przechowującej dane o jednym budynku:

Linia 1. class Budynek otwórz nawias klamrowy. Linia 2. public int x znak równości 0 średnik. Linia 3. public int y znak równości 0 średnik. Linia 4. zamknij nawias klamrowy.

Zaimplementujmy klasę główną programu, a w niej funkcję main. Stwórzmy też tablicę dziesięciu budynków.

Linia 1. class Budynek otwórz nawias klamrowy. Linia 2. public int x znak równości 0 średnik. Linia 3. public int y znak równości 0 średnik. Linia 4. zamknij nawias klamrowy. Linia 6. public class Main otwórz nawias klamrowy. Linia 7. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. Budynek otwórz nawias kwadratowy zamknij nawias kwadratowy budynki znak równości new Budynek otwórz nawias kwadratowy 10 zamknij nawias kwadratowy średnik.

Skorzystajmy z pętli, aby stworzyć instancje budynków dla każdego elementu tablicy (obecnie wskazują one na wartość null!). Ustawmy współrzędne tych budynków na takie, które będą na tyle skomplikowane, żeby odpowiedź nie była trywialna.

Linia 1. class Budynek otwórz nawias klamrowy. Linia 2. public int x znak równości 0 średnik. Linia 3. public int y znak równości 0 średnik. Linia 4. zamknij nawias klamrowy. Linia 6. public class Main otwórz nawias klamrowy. Linia 7. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. Budynek otwórz nawias kwadratowy zamknij nawias kwadratowy budynki znak równości new Budynek otwórz nawias kwadratowy 10 zamknij nawias kwadratowy średnik. Linia 9. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny budynki kropka length średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 10. budynki otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości new Budynek otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 11. budynki otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka x znak równości i plus i procent 4 średnik. Linia 12. budynki otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka y znak równości 1 plus i procent 3 średnik. Linia 13. zamknij nawias klamrowy.

Utworzyliśmy tablicę budynków. Teraz możemy przejść do właściwej części zadania. Zadeklarujmy dwie zmienne, w których przechowamy indeksy budynku pierwszego oraz piątego, a także dodajmy pętlę, która wykona się dwa razy.

Pamiętaj, że pierwszy budynek ma indeks 0.

Linia 1. class Budynek otwórz nawias klamrowy. Linia 2. public int x znak równości 0 średnik. Linia 3. public int y znak równości 0 średnik. Linia 4. zamknij nawias klamrowy. Linia 6. public class Main otwórz nawias klamrowy. Linia 7. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. Budynek otwórz nawias kwadratowy zamknij nawias kwadratowy budynki znak równości new Budynek otwórz nawias kwadratowy 10 zamknij nawias kwadratowy średnik. Linia 9. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny budynki kropka length średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 10. budynki otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości new Budynek otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 11. budynki otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka x znak równości i plus i procent 4 średnik. Linia 12. budynki otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka y znak równości 1 plus i procent 3 średnik. Linia 13. zamknij nawias klamrowy. Linia 15. int indeks1 znak równości 0 średnik. Linia 16. int indeks2 znak równości 4 średnik. Linia 18. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny 2 średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy.

Następnie użyjemy wzoru na odległość. Wynika on bezpośrednio z twierdzenia Pitagorasa i ma następującą postać:

Do obliczenia kwadratu oraz pierwiastka skorzystamy odpowiednio z funkcji Math.pow() oraz Math.sqrt(). Zapiszmy wnętrze pętli:

Linia 1. class Budynek otwórz nawias klamrowy. Linia 2. public int x znak równości 0 średnik. Linia 3. public int y znak równości 0 średnik. Linia 4. zamknij nawias klamrowy. Linia 6. public class Main otwórz nawias klamrowy. Linia 7. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. Budynek otwórz nawias kwadratowy zamknij nawias kwadratowy budynki znak równości new Budynek otwórz nawias kwadratowy 10 zamknij nawias kwadratowy średnik. Linia 9. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny budynki kropka length średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 10. budynki otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości new Budynek otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 11. budynki otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka x znak równości i plus i procent 4 średnik. Linia 12. budynki otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka y znak równości 1 plus i procent 3 średnik. Linia 13. zamknij nawias klamrowy. Linia 15. int indeks1 znak równości 0 średnik. Linia 16. intindeks2 znak równości 4 średnik. Linia 18. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny 2 średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 19. System kropka out kropka println otwórz nawias okrągły cudzysłów Odległość między budynkiem cudzysłów plus indeks1 plus cudzysłów a budynkiem cudzysłów plus indeks2 plus cudzysłów wynosi dwukropek cudzysłów zamknij nawias okrągły średnik. Linia 20. double distance znak równości Math kropka pow otwórz nawias okrągły budynki otwórz nawias kwadratowy indeks1 zamknij nawias kwadratowy kropka x minus budynki otwórz nawias kwadratowy indeks2 zamknij nawias kwadratowy kropka x przecinek 2 zamknij nawias okrągły plus Math kropka pow otwórz nawias okrągły budynki otwórz nawias kwadratowy indeks1 zamknij nawias kwadratowy kropka y minus budynki otwórz nawias kwadratowy indeks2 zamknij nawias kwadratowy kropka y przecinek 2 zamknij nawias okrągły średnik. Linia 21. distance znak równości Math kropka sqrt otwórz nawias okrągły distance zamknij nawias okrągły średnik. Linia 22. System kropka out kropka println otwórz nawias okrągły distance zamknij nawias okrągły średnik.

W ostatnim kroku zmieniamy wartości indeksów tak, aby wskazywały one na budynek trzeci oraz siódmy.

Kompletny kod:

Linia 1. class Budynek otwórz nawias klamrowy. Linia 2. public int x znak równości 0 średnik. Linia 3. public int y znak równości 0 średnik. Linia 4. zamknij nawias klamrowy. Linia 6. public class Main otwórz nawias klamrowy. Linia 7. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 8. Budynek otwórz nawias kwadratowy zamknij nawias kwadratowy budynki znak równości new Budynek otwórz nawias kwadratowy 10 zamknij nawias kwadratowy średnik. Linia 9. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny budynki kropka length średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 10. budynki otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości new Budynek otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 11. budynki otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka x znak równości i plus i procent 4 średnik. Linia 12. budynki otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka y znak równości 1 plus i procent 3 średnik. Linia 13. zamknij nawias klamrowy. Linia 15. int indeks1 znak równości 0 średnik. Linia 16. int indeks2 znak równości 4 średnik. Linia 18. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny 2 średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 19. System kropka out kropka println otwórz nawias okrągły cudzysłów Odleglosc miedzy budynkiem cudzysłów plus otwórz nawias okrągły indeks1 plus 1 zamknij nawias okrągły plus cudzysłów a budynkiem cudzysłów plus otwórz nawias okrągły indeks2 plus 1 zamknij nawias okrągły plus cudzysłów wynosi dwukropek cudzysłów zamknij nawias okrągły średnik. Linia 20. double distance znak równości Math kropka pow otwórz nawias okrągły budynki otwórz nawias kwadratowy indeks1 zamknij nawias kwadratowy kropka x minus budynki otwórz nawias kwadratowy indeks2 zamknij nawias kwadratowy kropka x przecinek 2 zamknij nawias okrągły plus Math kropka pow otwórz nawias okrągły budynki otwórz nawias kwadratowy indeks1 zamknij nawias kwadratowy kropka y minus budynki otwórz nawias kwadratowy indeks2 zamknij nawias kwadratowy kropka y przecinek 2 zamknij nawias okrągły średnik. Linia 21. distance znak równości Math kropka sqrt otwórz nawias okrągły distance zamknij nawias okrągły średnik. Linia 22. System kropka out kropka println otwórz nawias okrągły distance zamknij nawias okrągły średnik. Linia 23. indeks1 plus znak równości 2 średnik. Linia 24. indeks2 plus znak równości 2 średnik. Linia 25. zamknij nawias klamrowy. Linia 26. zamknij nawias klamrowy. Linia 27. zamknij nawias klamrowy.

Wyjście programu:

Linia 1. Odleglosc miedzy budynkiem 1 a budynkiem 5 wynosi dwukropek. Linia 2. 4 kropka 123105625617661. Linia 3. Odleglosc miedzy budynkiem 3 a budynkiem 7 wynosi dwukropek. Linia 4. 4 kropka 47213595499958.

Słownik

instancja typu
instancja typu

jest to pojedyncza zmienna danego typu