Małgorzata Łyczywek · 20 sierpień 2023
Darmowy kurs Java podstawy programowania
W ramach bazy wiedzy CODE:ME zapraszamy do spróbowania swoich siły z naszym darmowym przewodnikiem po Javie! Poznaj z nami podstawy i zobacz czy Java jest dla Ciebie!
Mini kurs: Praktyczne podstawy programowania Java dla początkujących
Plan kursu Java 101
Wstęp: przewodnik po Javie
Rozdział 1: Java pierwsze kroki
- Instalacja i konfiguracja środowiska programistycznego Java
- Pierwszy program w Javie
Rozdział 2: Podstawy składni Java
- Zmienne i typy danych
- Operatory i instrukcje warunkowe
- Komentarze
- Pętla FOR
- Funkcje
Rozdział 3: Java podstawy w zadaniach
Wstęp: przewodnik po Javie
Java jest jednym z najpopularniejszych języków programowania na świecie, a jej uniwersalność i wszechstronność sprawiają, że jest ona wykorzystywana w różnych dziedzinach, od tworzenia aplikacji webowych, przez gry komputerowe, aż po zaawansowane systemy korporacyjne (np. banki).
Wyszukując, gdzie jest używana Java, na pewno znajdziecie obszary takie jak:
- Web Development - szczególnie z frameworkami takimi jak Spring i Hibernate
- Aplikacje desktopowe
- Aplikacje mobilne, szczególnie na platformę Android
- Aplikacje chmurowe
- Internet rzeczy (Internet of Things)
- Sztuczna Inteligencja
- i wiele innych.
Java jest nie tylko językiem programowania, ale również platformą programistyczną. To oznacza, że oferuje środowisko uruchomieniowe (JRE), które zawiera wszystko, czego potrzebujesz, aby uruchomić program napisany w Javie.
Cechy Javy, za które kochają ją programiści:
- Prostota
- Obiektowość i wielowątkowość
- Przenośność
- Niezależność od architektury
- Bezpieczeństwo
- i jeszcze kilka innych ;)
Krótka historia, dla ciekawskich
Język Java, wbrew pozorom, jest stosunkowo “młodym językiem programowania” (porównując czas powstania do C++, Pythona czy SQL), bo powstała w latach 90-tych. Została stworzona przez zespół inżynierów z firmy Sun Microsystems, znanych jako "Green Team". Członkowie tego zespołu, w tym James Gosling, Mike Sheridan i Patrick Naughton, rozpoczęli projekt w celu opracowania języka programowania dla cyfrowych urządzeń, takich jak telewizory.
JAVA do WORA ????
Pierwsza publiczna implementacja Javy, Java 1.0, została wydana w styczniu 1996 roku i szybko zyskała popularność. Java była jednym z pierwszych języków, które wprowadziły koncepcję “WORA” (ang. Write Once, Run Anywhere):
"napisz raz, uruchom wszędzie",
co oznaczało, że programy napisane w Javie mogły być uruchamiane na dowolnym urządzeniu z zainstalowanym środowiskiem uruchomieniowym Javy (JRE).
Kalendarium
W 1997 roku Sun Microsystems wydało Java Development Kit (JDK) 1.1, które wprowadziło wiele nowych funkcji (takich jak JavaBeans, JDBC i RMI). W 1998 roku Sun Microsystems rozpoczęło prace nad J2EE (Java 2 Platform, Enterprise Edition), platformą dla rozwoju i uruchamiania aplikacji biznesowych z myślą o zastosowaniach korporacyjnych.
Java jako Open Source
W 2006 roku Sun Microsystems zdecydowało się na otwarcie kodu źródłowego Javy, co oznaczało, że każdy mógł teraz przeglądać i modyfikować kod źródłowy. Było to ważne wydarzenie w historii Javy, ponieważ przyczyniło się do jej dalszego rozwoju i popularyzacji wśród programistów.
W tym samym roku również nastąpiła zmiana nazw - pozbyto się ”dwa” i tak J2SE i J2EE zostały zmienione marketingowo na Java Standard Edition i Java Enterprise Edition (w skrócie JSE i JEE) czasem z dodatkiem słowa platform jako “Java Platform” + nazwa edycji (tj Java Platform Standard Edition oraz Java Platform Enterprise Edition). W Polsce czasem mówi się darmowa Java standardowa i Java biznesowa (czyli z płatnymi dodatkami).
Pod skrzydłami Oracle
W 2009 roku nastąpił kolejny kluczowy moment w historii Javy. Oracle Corporation, jeden z największych na świecie producentów oprogramowania, przejął Sun Microsystems. Przejęcie to oznaczało, że Java stała się własnością Oracle. Wielu obawiało się, że Oracle może zmienić kierunek rozwoju Javy, jednak firma zobowiązała się do kontynuowania rozwoju Javy jako otwartego i wolnego języka programowania.
Od tego czasu Oracle kontynuuje rozwój Javy, wprowadzając nowe funkcje i ulepszenia. W 2014 roku Oracle wydało jedną z najważniejszych wersji. Java 8 wprowadziła zmiany takie jak wsparcie programowania funkcyjnego (lambdy), strumienie i nowe API daty i czasu. W 2017 roku Oracle zapowiedziało nowy cykl wydawniczy Javy, w którym nowa wersja Javy ma być wydawana co sześć miesięcy i do tej pory jest to realizowane.
⚠️ Potocznie pod nazwą Java, mamy zazwyczaj na myśli całe środowisko programistyczne Java Development Kit, w skrócie JDK.
Dla tych, którzy rozpoczynają swoją przygodę z programowaniem w Javie, a jednocześnie marzą o zdobyciu pierwszych doświadczeń zawodowych, portal Jooble może być idealnym źródłem dla znalezienia odpowiednich ofert pracy. To doskonałe miejsce, aby odkryć fascynujące projekty i wejść w świat profesjonalnego rozwoju w obszarze Java. Sprawdź oferty pracy dla Junior Java Developerów na stronie agregatora ofert pracy Jooble, żeby wkroczyć na rynek pracy IT, wykorzystując zdobytą wiedzę z danego artykułu i rozwijając ją w praktyce.
Rozdział 1: Java pierwsze kroki
Jeżeli napotkasz trudności nie bój się pytać. Każdy kiedyś zaczynał, a nauka programowania bywa trudna.
Kurs Javy zaczniemy od przygotowania sobie niezbędnych narzędzi tj. instalacji środowiska oraz edytora kodu.
Instalacja i konfiguracja środowiska programistycznego Java
- Pobierz odpowiednią wersję Java Development Kit (JDK) ze strony oficjalnej Oracle: https://www.oracle.com/pl/java/technologies/downloads
- Wybierz wersję JDK zgodną z Twoim systemem operacyjnym (Windows, macOS, Linux).
- Uruchom instalator JDK i postępuj zgodnie z instrukcjami na ekranie, aby zainstalować JDK na swoim komputerze.
JDK jest dostępny w różnych wersjach, np. JDK 8, JDK 17, JDK 20, ale zawsze do nauki polecamy pobrać najnowszą lub najnowszą długo wspieraną wersję (LTS - long-term support jest najbardziej stabilna).
Edytor kodu
Wybranie "najlepszego" edytora kodu to zawsze obiekt długich dyskusji developerów. Obecnie najpopularniejszym edytorem w społeczności programistów języka Java jest jest IntelliJ IDEA.
Edytor ten ma 3 wersje licencyjne:
- Ultimate (płatna do użytku dla użytkowników zaawansowanych),
- Edu (darmowa dla studentów i placówek edukacyjnych)
- Community (darmowa dla wszystkich).
Pobierz darmową wersję IntelliJ IDEA Community ze strony https://www.jetbrains.com/idea/download/
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Po kompilacji i po wykonaniu skompilowanego kodu zobaczysz wynik swojego pierwszego programu - na ekranie wyświetli się napis "Hello World !".
Co się dzieje w tym kodzie?
● W pierwszej linii deklarujemy klasę o nazwie HelloWorld
. Klasa to podstawowy blok budujący w językach programowania obiektowego, takich jak Java. Wszystkie metody i zmienne muszą być zdefiniowane wewnątrz klasy.
● Główna metoda main
- metoda to punkt startowy każdego programu w Javie. Kiedy uruchomisz program, kod zawarty w tej metodzie zostanie wykonany jako pierwszy.
public
: oznacza, że metoda jest dostępna publicznie, co oznacza, że może być wywołana z dowolnego miejscastatic
: oznacza, że metoda należy do klasy, a nie do konkretnej instancji klasyvoid
: oznacza, że metoda nie zwraca żadnej wartościmain
: nazwa metodyString[] args
: Parametr, który pozwala na przekazanie argumentów do programu z linii poleceń
● Używamy istniejącej w Javie metody System.out.println()
do wyświetlenia "wydrukowania" (print) tekstu "Hello, World!" na ekranie.
Języki programowania dzielimy na kompilowane i interpretowane. Java należy do tej pierwszej grupy.
Kompilacja w to proces przetwarzania kodu źródłowego napisanego przez programistę (plik .java) na kod maszynowy (kod bajtowy w pliku .class), który może być zrozumiany i wykonywany przez komputer. Kompilacja pozwala sprawdzić, czy nasz kod nie zawiera błędów składniowych i logicznych, co pomaga uniknąć wielu problemów podczas uruchamiania programu.
Ciekawostka: Sprawa nie jest tak prosta jak się wydaje. Java jest uważana za język zarówno kompilowany i interpretowany. Posiada również technikę kompilacji zwaną JIT (Just-In-Time) odpowiadającą za wydajność.
Plik wynikowy z kompilacji może być uruchomiony wielokrotnie, bez konieczności ponownej kompilacji, co przyspiesza proces tworzenia i testowania aplikacji. Dzięki kompilacji język Java jest łatwy w przenoszeniu, ponieważ kod maszynowy może być uruchamiany na różnych platformach, które wspierają wirtualną maszynę Javy (JVM).
Pierwszy rozdział zamykamy radosną wiadomością - napisaliście swój pierwszy program w Javie “Hello World!”.
Podstawy składni Java
Koncepcje zmiennych i typów danych są uniwersalne we wszystkich językach programowania, tak jak samo działanie instrukcji warunkowych, dlatego raz ucząc się podstaw Javy z dużą łatwością zrozumiesz inne języki programowania.
Typy i zmienne w Javie
Zmienna to miejsca w pamięci komputera, gdzie możemy przechowywać dane. Każda zmienna ma swoją nazwę, która pozwala nam się do niej odwołać w programie.
Deklaracja zmiennej: Aby utworzyć zmienną, musimy zadeklarować jej typ i nazwę.
Na przykład: int liczba;
— deklaruje zmienną o nazwie liczba typu całkowitego (int).
Inicjalizacja zmiennej: Po zadeklarowaniu zmiennej, musimy przypisać jej początkową wartość.
Na przykład: liczba = 50;
nadaje zmiennej liczba wartość 50.
Typy danych: W Javie, zmienne są podstawowymi jednostkami przechowywania danych. Każda zmienna musi mieć określony typ, który informuje kompilator, jakie rodzaje danych można w niej przechowywać. Java oferuje różne typy danych, które można podzielić na dwie główne kategorie: typy proste (np. int, double, char) i typy obiektowe (np. String, Array).
• Typy proste
- int: służy do przechowywania liczb całkowitych
- double: używany do przechowywania liczb zmiennoprzecinkowych
- char: przechowuje pojedynczy znak
• Typy obiektowe
- String: służy do przechowywania ciągów znaków zdań, wyrazów
- Array: używany do przechowywania wielu wartości tego samego typu. Na przykład:
int[] numbers = {1, 2, 3};
Operacje na zmiennych Możemy wykonywać różne operacje na zmiennych, np. dodawanie, odejmowanie, mnożenie itp.
W Javie mamy też dostępne znane dobrze operatory arytmetyczne, które służą do wykonywania operacji matematycznych.
+
Dodawanie-
Odejmowanie*
Mnożenie/
Dzielenie%
Reszta z dzielenia
Przykładowo:
int suma = liczba1 + liczba2;
stworzy nową zmienną suma, która przechowuje wynik dodawania liczba1 i liczba2. Natomiast:
int modulo = 5 % 2;
będzie zawierało 1, gdyż reszta z dzielenia 5 przez 2 wynosi właśnie 1.
Konwersja typów danych w Javie
Czasami musimy konwertować dane z jednego typu na inny. W Javie możemy spotkać się z dwoma głównymi rodzajami konwersji typów danych: jawnej i niejawnej. Konwersja typów jest często potrzebna, gdy chcemy przypisać wartość jednego typu do zmiennej innego typu.
● Konwersja niejawna (automatyczna)
W tym przypadku, Java automatycznie konwertuje typ danych. Zwykle zachodzi, gdy przechodzimy od mniejszego typu danych do większego. Na przykład:
int myInt = 10;
long myLong = myInt; // Automatyczna konwersja z int na long
W tym przypadku, zmienna myInt typu int jest automatycznie konwertowana na long, ponieważ long jest większym typem danych. Nie musimy niczego dodatkowo wprowadzać.
● Konwersja jawna (rzutowanie)
Czasami musimy jawnie wskazać Javie, że chcemy dokonać konwersji, zwłaszcza gdy istnieje ryzyko utraty danych. Na przykład:
double myDouble = 10.79;
int myInt = (int) myDouble; // Jawnie konwertujemy z double na int = 10
W tym przypadku, zmienna myDouble jest konwertowana na int przez rzutowanie. Należy pamiętać, że w tym przypadku część dziesiętna zostanie obcięta.
● Konwersja przez metody
Java oferuje również metody do konwersji typów danych, na przykład:
int myInt = Integer.parseInt("123"); // Konwersja String na int
W tym przypadku, metoda parseInt z klasy Integer konwertuje łańcuch znaków "123" na int.
Podsumujmy zmienne i typy w Javie
W ramach podsumowania tematu typy i zmienne w Javie, przeanalizuj kod poniżej:
Praca z Tablicami
Warto uzupełnić naszą wiedzę o podstawowe informacje o tablicach. Tablica to struktura danych, która przechowuje wiele wartości tego samego typu. Zobacz jak stworzyć tablicę, jak odwołać się do jej elementów i jak wyświetlić je na ekranie.
Deklaracja i inicjalizacja tablicy w Javie
Deklaracja i inicjalizacja tablicy wygląda w następujący sposób int[] testArray = {10, 20, 30, 40, 50};
. W tym przypadku stworzyliśmy tablicę testArray
typu int
(liczby całkowite) i zainicjowaliśmy ją pięcioma elementami.
Wyświetlanie elementów tablicy
Co jeśli chcemy wyświetlić element 1 w tablicy? Czy wystarczy testArray[1]
? Odpowiedź brzmi tak.
System.out.println("Element o indeksie 1: " + testArray[1]);
Co się wyświetli? Element 1 to 20
, ponieważ w Javie indeksowanie tablic zaczyna się od 0
.
Oznacza to, że pierwszy element ma indeks 0
, drugi element ma indeks 1
itd.
Stąd ostatni element tablicy to testArray[testArray.length - 1]
, ponieważ długość tablicy wynosi 5
, ale indeksowanie zaczyna się od 0
.
System.out.println("Pierwszy element: " + testArray[0]);
System.out.println("Ostatni element: " + testArray[testArray.length - 1]);
Co jeśli chcesz sprawdzić czy pierwszy i ostatni element są takie same? Tutaj konieczne są instrukcje warunkowe!
Instrukcje warunkowe w Javie
Instrukcje warunkowe to jedne z najważniejszych elementów w programowaniu. Pozwalają one na podejmowanie decyzji w kodzie na podstawie spełnienia określonych warunków. W Javie mamy kilka różnych sposobów na implementację instrukcji warunkowych, a najpopularniejsze z nich to if, else if i else, oraz switch.
Instrukcja if
Instrukcja if
pozwala na wykonanie określonego bloku kodu tylko wtedy, gdy dany warunek jest spełniony.
int age = 18;
if (age >= 18) {
System.out.println("Jesteś pełnoletni.");
}
Instrukcje else if
i else
Jeśli mamy więcej niż jeden warunek do sprawdzenia, możemy użyć instrukcji else if
. Instrukcja else
zostanie wykonana, gdy żaden z wcześniejszych warunków nie zostanie spełniony.
int score = 85;
if (score >= 90) {
System.out.println("Ocena 5");
} else if (score >= 80) {
System.out.println("Ocena 4");
} else {
System.out.println("Ocena poniżej 4");
}
Instrukcja switch
Instrukcja switch
jest używana, gdy mamy wiele warunków, które chcemy sprawdzić. Jest to alternatywa dla wielu instrukcji if
i else if
.
char grade = 'B';
switch (grade) {
case 'A':
System.out.println("Doskonały!");
break;
case 'B':
System.out.println("Dobrze!");
break;
default:
System.out.println("Niewłaściwa ocena.");
}
Warto wspomnieć przy okazji 2 rodzaje operatorów - relacyjne i logiczne, bez których trudno wykonywać instrukcje warunkowe.
Operatory relacyjne
Służą do porównywania dwóch wartości.
==
Równość!=
Nierówność<
Mniejszy niż>
Większy niż<=
Mniejszy lub równy>=
Większy lub równy
if (a < b) {
System.out.println("a jest mniejsze od b");
}
Operatory logiczne
Służą do łączenia warunków logicznych.
&&
AND (i)!
NOT (nie)||
OR (lub)
if (a < b && b > 0) {
System.out.println("Oba warunki są spełnione");
}
Komentarze w Javie
Komentarze w programowaniu są jak notatki w książce kucharskiej. Pomagają zrozumieć, co dany fragment kodu robi, bez wpływania na sam przepis (czyli działanie programu). W Javie mamy kilka różnych sposobów na dodanie komentarzy do kodu.
Komentarze jednolinijkowe
Najprostszym rodzajem komentarza jest komentarz jednolinijkowy, który zaczyna się od dwóch ukośników //
. Wszystko, co znajduje się po tych znakach w tej samej linii, jest traktowane jako komentarz.
// To jest komentarz jednolinijkowy
int x = 10; // To również jest komentarz jednolinijkowy
Komentarze wielolinijkowe
Jeśli chcesz dodać komentarz obejmujący kilka linii, użyj /*
do rozpoczęcia komentarza i */
do jego zakończenia.
/*
To jest komentarz
wielolinijkowy. Możesz tu
napisać kilka zdań.
*/
Komentarze dokumentacyjne
W Javie istnieje również specjalny rodzaj komentarza, zwanego komentarzem dokumentacyjnym. Jest on używany głównie do generowania dokumentacji API i zaczyna się od /**
, a kończy */
.
/**
* To jest komentarz dokumentacyjny.
* Możesz tu opisać, co dana funkcja lub klasa robi.
*/
Dlaczego komentarze są przydatne?
- Czytelność: Pomagają innym programistom (a często także Tobie samemu w przyszłości) zrozumieć, co dany fragment kodu robi.
- Debugowanie: Ułatwiają znalezienie i naprawienie błędów w kodzie.
- Dokumentacja: Są używane do generowania automatycznej dokumentacji, co jest szczególnie ważne w dużych projektach.
Pętla FOR w Javie
Pętla for
to jedna z najbardziej podstawowych struktur kontrolnych w Javie, używana do powtarzania bloku kodu określoną liczbę razy. Jest to szczególnie przydatne, gdy chcemy wykonać pewną operację na każdym elemencie tablicy lub listy, albo po prostu chcemy coś zrobić wielokrotnie w określony sposób.
Składnia
Oto podstawowa składnia pętli for
:
for (inicjalizacja; warunek; aktualizacja) {
// Blok kodu do wykonania
}
‣ inicjalizacja: Tutaj ustawiamy początkową wartość zmiennej sterującej pętlą
‣ warunek: Pętla będzie się wykonywać, dopóki ten warunek jest spełniony
‣ aktualizacja: Po każdym przejściu pętli, zmienna sterująca jest aktualizowana w ten sposób
Przykład:
// Wypisanie liczb od 1 do 10
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
W tym przykładzie zmienna i
jest inicjalizowana wartością 1
i pętla będzie się wykonywać, dopóki i
jest mniejsze lub równe 10
. Po każdym przejściu pętli, i
jest zwiększane o 1
.
Pętla FOR z tablicą
Pętla for
jest często używana do iteracji przez tablice:
int[] numbers = {1, 2, 3, 4, 5};
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
Pętla FOR-each (rozszerzona)
Java oferuje również specjalną wersję pętli for
znaną jako pętla FOR-each, która jest bardziej czytelna, gdy iterujemy przez kolekcje:
for (int number : numbers) {
System.out.println(number);
}
ZADANIE z pętlą for
:
Aby lepiej zrozumieć pętle, spójrz na ich działanie na przykładzie programu, który przeliczy tablicę cen produktów z dolara amerykańskiego (USD) na złotówki (PLN). Załóżmy, że kurs wymiany wynosi 4.2 PLN za 1 USD, mamy też listę cen 25, 45, 49, 89, 95, 100.
- Zadeklaruj tablicę liczb całkowitych reprezentującą ceny w USD:
(25, 45, 49, 89, 95, 100)
. - Utwórz nową tablicę, która będzie przechowywać przeliczone ceny w PLN.
- Użyj pętli
for
do iteracji przez tablicę cen w USD i przeliczenia każdej ceny na PLN. - Wydrukuj obie tablice, aby zobaczyć wyniki przed i po konwersji.
W tej części skupiliśmy się na pętli for
, która jest jednym z najbardziej podstawowych i wszechstronnych mechanizmów iteracyjnych w Javie. Jest ona często używana do wykonywania bloku kodu określoną liczbę razy i jest przydatna w operacjach na tablicach i kolekcjach.
Warto jednak pamiętać, że pętla for
to nie jedyna pętla dostępna w Javie. Inne popularne pętle to while
i do-while
, które również mają swoje zastosowania. Nasz darmowy kurs Java dla początkujących przedstawia tylko pętlę for
jako wprowadzenie do konstrukcji iteracyjnych w Javie. Jest to doskonały punkt wyjścia dla początkujących, którzy chcą zrozumieć podstawy sterowania przepływem programu.
Funkcje w Javie
Funkcje, znane również jako metody w kontekście języka Java, są jednym z najważniejszych elementów struktury każdego programu. Umożliwiają one grupowanie bloków kodu w logiczne jednostki, które można wielokrotnie wywoływać w różnych częściach programu. W ramach darmowgo kursu Java dla początkujących mówimy podstawy tworzenia i używania funkcji w Javie.
Składnia i definicja funkcji
Oto podstawowa składnia funkcji w Javie:
typZwracany nazwaFunkcji(typParametru1 nazwaParametru1, typParametru2 nazwaParametru2, ...) {
// Ciało funkcji
return wartość;
}
‣ typZwracany: Typ danych, który funkcja zwraca. Jeśli funkcja nic nie zwraca, używamy słowa kluczowego void
.
‣ nazwaFunkcji: Nazwa, pod którą funkcja będzie dostępna w programie.
‣ typParametru i nazwaParametru: Typ i nazwa parametrów, które funkcja przyjmuje.
Przykład funkcji
Oto przykład funkcji, która dodaje dwie liczby:
public static int addNumbers(int a, int b) {
int sum = a + b;
return sum;
}
Wywoływanie funkcji
Aby użyć funkcji, musimy ją wywołać w odpowiednim miejscu w kodzie:
public static void main(String[] args) {
int result = addNumbers(5, 10);
System.out.println("Wynik dodawania: " + result);
}
Całość będzie wyglądać następująco:
Funkcje i pętle
Funkcje często są używane razem z innymi elementami języka np. pętlami. Na przykład, możemy mieć funkcję, która oblicza średnią arytmetyczną tablicy liczb:
public static double calculateAverage(int[] numbers) {
int sum = 0;
for (int number : numbers) {
sum += number;
}
return (double) sum / numbers.length;
}
Java: Zadania
Mała uwaga do zadań. Teksty z polskimi znakami wymagają kodowania UTF-8 zazwyczaj jest to domyślne kodowanie. Jeśli jednak kopiujesz rozwiązanie i przy próbie wyświetlenia otrzymasz błąd (error: unmappable character for encoding US-ASCII), to wystarczy pozbyć się w tekście polskich znaków lub zmienić kodowanie w edytorze na UTF-8).
Zadanie 1
Napisz funkcję, która przechowuje listę liczb i zwraca różnicę między pierwszym i ostatnim elementem listy.
Jakie kroki są potrzebne, aby rozwiązać to zadanie?
‣ Utwórz klasę zawierającą funkcję
‣ Stwórz tablicę liczb
‣ Potrzebujemy dostać się do elementu pierwszego (index: 0) i ostatniego (w zależności jak długa jest Twoja tablica.
‣ Odejmujemy wartość elementu ostatniego od pierwszego
‣ Możliwe rozszerzenie: sprawdzenie, który element jest większy i zawsze odejmowanie od większego mniejszy, by uzyskać wartość bezwzględną ????
Kod z rozwiązaniem:
public class Main {
public static void main(String[] args) {
int[] numbers = { 1, 2, 3, 4, 5 };
int result = findDifference(numbers);
System.out.println("Różnica między pierwszym i ostatnim elementem tablicy to: " + result);
}
public static int findDifference(int[] numbers) {
int firstElement = numbers[0];
int lastElement = numbers[numbers.length - 1];
return lastElement - firstElement;
}
}
Co ważne, funkcja findDifference
bezpośrednio zwraca różnicę między ostatnim i pierwszym elementem tablicy. Oczywiście, zakładamy tutaj, że tablica zawiera co najmniej dwa elementy.
Zadanie 2
Napisz funkcję, która sprawdza, czy dany ciąg znaków jest palindromem.
Palindrom to słowo, fraza, liczba lub inny ciąg znaków, który czytany od przodu i od tyłu brzmi tak samo np. radar, kajak.
Jakie kroki są potrzebne, aby rozwiązać to zadanie?
‣ Utwórz klasę zawierającą funkcję
‣ Stwórz funkcję, która przyjmuje ciąg znaków jako argument
‣ Zamień ciąg znaków na tablicę znaków
‣ Sprawdź, czy tablica znaków jest palindromem
‣ Zwróć wynik jako wartość logiczną (true/false)
Kod z rozwiązaniem:
public class Main {
public static void main(String[] args) {
String testString = "radar";
boolean result = isPalindrome(testString);
System.out.println("Czy dany ciąg znaków jest palindromem? " + result);
}
public static boolean isPalindrome(String str) {
char[] charArray = str.toCharArray();
int length = charArray.length;
for (int i = 0; i < length / 2; i++) {
if (charArray[i] != charArray[length - i - 1]) {
return false;
}
}
return true;
}
}
Funkcja isPalindrome
zwraca wartość logiczną (true
/false
), która informuje, czy dany ciąg znaków jest palindromem czy nie.
Zadanie 3
Napisz funkcję, która sprawdza, czy dwa ciągi znaków są anagramami.
Jakie kroki są potrzebne, aby rozwiązać to zadanie?
‣ Utwórz klasę zawierającą funkcję
‣ Stwórz funkcję, która przyjmuje dwa ciągi znaków jako argumenty
‣ Zamień oba ciągi znaków na tablice znaków
‣ Posortuj obie tablice znaków
‣ Porównaj posortowane tablice znaków
‣ Zwróć wynik jako wartość logiczną (true/false)
Kod z rozwiązaniem:
public class Main {
public static void main(String[] args) {
String str1 = "listen";
String str2 = "silent";
boolean result = areAnagrams(str1, str2);
System.out.println("Czy dwa ciągi znaków są anagramami? " + result);
}
public static boolean areAnagrams(String str1, String str2) {
char[] charArray1 = str1.toCharArray();
char[] charArray2 = str2.toCharArray();
sortArray(charArray1);
sortArray(charArray2);
String sortedStr1 = new String(charArray1);
String sortedStr2 = new String(charArray2);
return sortedStr1.equals(sortedStr2);
}
public static void sortArray(char[] array) {
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[i] > array[j]) {
char temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
}
Funkcja areAnagrams
korzysta z funkcji, która sortuje zawartość tablic, dzięki czemu jest możliwe porównanie ich zawartości.
Zadanie 4
Napisz funkcję, która konwertuje temperaturę z jednostek Celsiusza na Fahrenheita i odwrotnie.
Jakie kroki są potrzebne, aby rozwiązać to zadanie?
‣ Utwórz klasę zawierającą funkcję
‣ Stwórz funkcję, która przyjmuje temperaturę i jednostkę jako argumenty
‣ Sprawdź, w jakiej jednostce podana jest temperatura
‣ Wykonaj odpowiednią konwersję
‣ Zwróć skonwertowaną temperaturę
Kod z rozwiązaniem:
public class Main {
public static void main(String[] args) {
double temperature = 100;
String unit = "C";
double convertedTemperature = convertTemperature(temperature, unit);
System.out.println("Skonwertowana temperatura to: " + convertedTemperature);
}
public static double convertTemperature(double temperature, String unit) {
if (unit.equals("C")) {
return (temperature * 9 / 5) + 32;
} else if (unit.equals("F")) {
return (temperature - 32) * 5 / 9;
} else {
return -1; // Nieznana jednostka temp.
}
}
}
Zadanie 5
Napisz funkcję, która konwertuje odległość między różnymi jednostkami (mile na jardy, albo km na stopy).
Jakie kroki są potrzebne, aby rozwiązać to zadanie?
‣ Stwórz funkcję, która przyjmuje odległość i jednostkę jako argumenty
‣ Sprawdź, w jakiej jednostce podana jest odległość
‣ Wykonaj odpowiednią konwersję
‣ Zwróć skonwertowaną odległość
Kod z rozwiązaniem (mile na jardy - 1 mila to 1760 jardów):
public class Main {
public static void main(String[] args) {
double distance = 100;
String unit = "mile";
double convertedDistance = convertDistance(distance, unit);
System.out.println("Skonwertowana odległość to: " + convertedDistance);
}
public static double convertDistance(double distance, String unit) {
if (unit.equals("mile")) {
return distance * 1760;
} else if (unit.equals("yard")) {
return distance / 1760;
} else {
return -1; // Nieznana jednostka
}
}
}
Zadanie 6
Napisz funkcję, która konwertuje jednostki czasu (np. dni na godzin i minuty).
Jakie kroki są potrzebne, aby rozwiązać to zadanie?
Zadanie jest analogiczne do powyższego z jednostkami miary.
Kod z rozwiązaniem:
public class Main {
public static void main(String[] args) {
int days = 3;
String convertedTime = convertTime(days);
System.out.println("Czas w godzinach i minutach: " + convertedTime);
}
public static String convertTime(int days) {
int hours = days * 24;
int minutes = hours * 60;
return hours + " godzin i " + minutes + " minut";
}
}
W tym przypadku, konwersja jest stosunkowo prosta: mnożymy ilość dni przez 24, aby uzyskać godziny, a następnie mnożymy godziny przez 60, aby uzyskać minuty.
Zadanie 7
Napisz program, który wypisze liczby pierwsze mniejsze niż 100.
Jakie kroki są potrzebne, aby rozwiązać to zadanie?
‣ Utwórz klasę zawierającą funkcję main
‣ Stwórz pętlę, która przeiteruje przez liczby od 2 do 99
‣ Dla każdej liczby, sprawdź czy jest liczbą pierwszą
‣ Jeśli tak, wypisz ją na ekranie
Liczba pierwsza to liczba naturalna większa od 1, która ma dokładnie dwa różne dzielniki: jedynkę i siebie samą. Innymi słowy, liczba pierwsza jest liczbą, która nie jest podzielna przez żadną inną liczbę niż 1 i ona sama.
Na przykład, liczby 2, 3, 5, 7, 11, 13, 17 itd. są liczbami pierwszymi.
W kontekście programowania, można sprawdzić, czy liczba jest liczbą pierwszą, iterując przez wszystkie liczby od 2 do pierwiastka kwadratowego z tej liczby i sprawdzając, czy dana liczba jest przez nie podzielna. Jeśli nie znajdziemy żadnego dzielnika, liczba jest liczbą pierwszą.
Kod z rozwiązaniem:
public class Main {
public static void main(String[] args) {
for (int i = 2; i < 100; i++) {
if (isPrime(i)) {
System.out.println(i);
}
}
}
public static boolean isPrime(int n) {
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
Funkcja isPrime
sprawdza, czy dana liczba jest liczbą pierwszą. Używa ona pętli, która iteruje przez wszystkie liczby od 2 do pierwiastka kwadratowego z danej liczby (co jest optymalizacją). Jeśli znajdzie jakikolwiek dzielnik, zwraca false
. W przeciwnym razie, zwraca true
.
Zadanie 8*
Napisz funkcję, która konwertuje liczby między różnymi systemami liczbowymi (np. z dziesiętnego na binarny).
Konwersja liczby z systemu dziesiętnego na binarny opiera się na dzieleniu liczby przez 2 i zapisywaniu reszt z tych dzieleni. Oto jak to działa krok po kroku:
‣ Dzielenie liczby przez 2: Podziel daną liczbę przez 2
‣ Zapisywanie reszty: Zapisujesz resztę z dzielenia (0 lub 1) jako najmniej znaczący bit (LSB, Least Significant Bit) liczby binarnej.
‣ Aktualizacja liczby: Aktualizujesz liczbę, przypisując jej wynik dzielenia przez 2 (bez reszty).
‣ Powtarzanie: Powtarzasz te kroki, aż liczba osiągnie wartość 0.
Przykład dla liczby 10
Dzieli się 10 przez 2. Wynik to 5, reszta to: → 0
Dzieli się 5 przez 2. Wynik to 2, reszta to: → 1
Dzieli się 2 przez 2. Wynik to 1, reszta to: → 0
Dzieli się 1 przez 2. Wynik to 0, reszta to: → 1
Reszty: 0, 1, 0, 1
Odczytuje się je w odwrotnej kolejności i otrzymuje: 1010, co jest reprezentacją liczby 10 w systemie binarnym.
Kod z rozwiązaniem:
public class Main {
public static void main(String[] args) {
int number = 10;
String binaryString = "";
for (; number > 0; number = number / 2) {
int remainder = number % 2;
binaryString = remainder + binaryString; // dodajemy na początek
}
System.out.println("Liczba w systemie binarnym: " + binaryString);
}
}
W tym kodzie jest miejsce na usprawnienia. Po pierwsze, w mini kursie Javy wprowadziliśmy tylko pętlę for
. W tym przypadku, pętla for
nie ma sekcji inicjalizacji, ponieważ zmienna number
jest już zainicjowana. Dla usprawnienia i bardziej naturalnego zapisu, możnaby użyć pętli while
.
W kodzie używamy String
. Lepsze będzie użycie StringBuilder
do zapisywania reszt. Każda nowa reszta jest wstawiana na początek ciągu, co automatycznie odwraca kolejność reszt. Na końcu konwersji odczytujemy cały ciąg jako liczbę binarną. Jest to zazwyczaj lepszy wybór pod względem wydajności w przypadkach, gdzie należy wielokrotnie modyfikować lub dodawać do łańcucha znaków. StringBuilder
oferuje również dodatkowe metody, które ułatwiają manipulację łańcuchami, takie jak insert
, delete
, reverse
itd.
Kod z rozwiązaniem:
public class Main {
public static void main(String[] args) {
int number = 10;
StringBuilder binaryString = new StringBuilder();
while (number > 0) {
int remainder = number % 2;
binaryString.insert(0, remainder);
number = number / 2;
}
System.out.println("Liczba w systemie binarnym: " + binaryString.toString());
}
}
Zadanie 9*
Napisz program, który znajduje wszystkie liczby doskonałe mniejsze od n. Liczba doskonała to taka, która jest równa sumie swoich dzielników (bez siebie samej).
Jakie kroki są potrzebne, by rozwiązać zadanie?
‣ Utwórz klasę zawierającą funkcję main
‣ Zdefiniuj zmienną n
, która będzie górną granicą poszukiwań
‣ Iteruj przez wszystkie liczby od 1 do n-1
‣ Dla każdej liczby, znajdź jej dzielniki i oblicz ich sumę
‣ Sprawdź, czy suma dzielników jest równa liczbie
‣ Jeśli tak, wypisz liczbę jako liczbę doskonałą
Kod rozwiązania:
public class Main {
public static void main(String[] args) {
int n = 1000; // Górna granica poszukiwań
for (int i = 1; i < n; i++) {
if (isPerfect(i)) {
System.out.println(i + " jest liczbą doskonałą.");
}
}
}
public static boolean isPerfect(int number) {
int sum = 0;
for (int i = 1; i <= number / 2; i++) {
if (number % i == 0) {
sum += i;
}
}
return sum == number;
}
}