Celem laboratorium jest zapoznanie się z podstawowymi pojęciami oraz narzędziami Javy.
Najważniejsze zadania:
- Konfiguracja środowiska.
- Stworzenie klasy
World
. - Stworzenie enumu
Direction
.
- W programie Javy funkcja (a właściwie metoda)
main
musi być częścią jakiejś klasy. Jest ona punktem startowym programu. - Metoda
main
akceptuje tablicę argumentów typuString
, ponadto jest publiczną metodą statyczną:
public class World {
public static void main(String[] args) {
// treść metody
}
}
- Do wypisywania komunikatów użyj wywołań
System.out.print
orazSystem.out.println
. - Standardowe wyjście można zaimportować do programu poleceniem
import static java.lang.System.out;
. Wtedy komunikaty można wypisywać za pomocą wywołaniaout.print
iout.println
. - Warunki logiczne w Javie są przechowywane w zmiennej typu
boolean
- nie ma automatycznej konwersji z innych typów. - W Javie dostępna jest standardowa pętla
for
znana z C/C++. Można również użyć alternatywnej pętlifor
(tzw.for each
) do iterowania po elementach kolekcji:
for(String argument : arguments){
}
- Uwaga! W Javie łańcuchy znaków (oraz inne typy referencyjne) porównuje się za pomocą wywołania
equals
, np.string1.equals(string2)
. Zapisstring1 == string2
jest składniowo poprawny, ale sprawdza identyczność referencji. - Typ wyliczeniowy deklaruje się za pomocą słowa kluczowego
enum
, np.:
enum Direction {
FORWARD,
BACKWARD,
RIGHT,
LEFT
}
- Typu wyliczeniowego można użyć odwołując się do jego składowych, np.:
Direction direction = Direction.FORWARD;
- W Javie (od wersji 7) można wykonywać instrukcję
switch
na łańcuchach znaków, np.
switch (argument) {
case "f":
out.println("Do przodu");
break;
case "b":
out.println("Do tyłu");
break;
}
- Od Javy w wersji 13 można również używać nowej składni wyrażenia
switch
, która pozwala przypisać jego wynik do zmiennej:
String message = switch (argument) {
case "f" -> "Do przodu";
case "b" -> "Do tyłu";
default -> "Nieznana komenda";
};
out.println(message);
- W Javie można dość łatwo przekazać fragment tablicy, np. jako rezultat wywołania funkcji lub jako argument pętli for.
Służy do tego wywołanie
Arrays.copyOfRange(array, startInclusive, endExclusive);
-
Uruchom program IntelliJ.
-
Utwórz nowy projekt typu
Gradle
->Java
(!nieJava
->Java
) o nazwieoolab
. -
W katalogu
src/main/java/
utwórz pakietagh.ics.oop
(ppm nasrc/main/java
->New package
). -
W pakiecie
agh.ics.oop
utwórz klasęWorld
ze statyczną funkcjąmain
. -
Zaimplementuj metodę
main
tak aby wyświetlały się dwa komunikaty:system wystartował
system zakończył działanie
-
Uruchom program np. klikając zieloną ikonę pojawiającą się na początku linii, w której występuje metoda
main
. -
Dodaj metodę statyczną
run
, która jest wywoływana pomiędzy tymi komunikatami. -
Metoda
run
powinna informować o tym, że zwierzak idzie do przodu. -
Uruchom program.
-
Rozszerz metodę
run
tak by akceptowała tablicę argumentów typuString
. -
Po komunikacie o poruszaniu się do przodu wypisz w konsoli wartości wszystkich argumentów tej metody oddzielone przecinkami.
-
Zwróć uwagę na to, żeby nie było nadmiarowych przecinków.
-
Uruchom program z dowolnymi parametrami (muszą występować co najmniej 2).
-
Zmodyfikuj program tak aby interpretował wprowadzone argument:
f
- oznacza, że zwierzak idzie do przodu,b
- oznacza, że zwierzak idzie do tyłu,r
- oznacza, że zwierzak skręca w prawo,l
- oznacza, że zwierzak skręca w lewo,- pozostałe argumenty powinny być ignorowane.
-
Poruszanie się oraz zmiana kierunku ma być oznajmiana odpowiednim komunikatem. Program powinien akceptować dowolną liczbę argumentów. Przykładowo wprowadzenie sekwencji
f f r l
powinno dać w wyniku następujące komunikaty:- Start
- Zwierzak idzie do przodu
- Zwierzak idzie do przodu
- Zwierzak skręca w prawo
- Zwierzak skręca w lewo
- Stop
-
Zmodyfikuj program w ten sposób, aby metoda
run
nie akceptowała tablicy łańcuchów znaków, lecz tablicę wartości typu wyliczeniowego (enum
). Zamiana łańcuchów znaków powinna być realizowana przez metodę wywoływaną w funkcjimain
przed wywołaniem metodyrun
, natomiast typ wyliczeniowy powinien być zdefiniowany w osobnym pliku (Direction.java
) w pakiecieagh.ics.oop
. -
Zweryfikuj poprawność działania programu poprzez jego uruchomienie.
-
Zamknij IntelliJ.
-
W pliku
build.gradle
w sekcjiplugins
dodaj linięid 'application'
:plugins { id 'application' id 'java' }
-
W tym samym pliku dodaj sekcję:
application { getMainClass().set('agh.ics.oop.World') }
-
W tym samym pliku dodaj sekcję:
java { toolchain { languageVersion.set(JavaLanguageVersion.of(17)) } }
(możesz wybrać inną wersję Javy).
-
Otwórz konsolę (np. terminal/PowerShell).
-
Wywołaj komendę
export JAVA_HOME=/usr/lib/jvm/java-17
(pod Windows trzeba będzie ustawić zmienną środowiskową wskazującą na katalog, w którym zainstalowana jest Java). Komendę trzeba zaadaptować do lokalnej instalacji Javy! -
Uruchom program poleceniem
./gradlew run --args="f l"
(lubgradlew.bat ...
w systemie Windows) -
Zmodyfikuj argumenty wywołania i sprawdź zachowanie programu.
-
(Dla zaawansowanych) Zmień kod odpowiedzialny za konwersję argumentów oraz wyświetlanie kierunków, tak by korzystał z interfejsu
stream
dostępnego w Javie 8.