Celem laboratorium jest zapoznanie się z podstawowymi pojęciami oraz narzędziami Javy.
- W programie Javy funkcja (a właściwie metoda)
mainmusi być częścią jakiejś klasy. Jest ona punktem startowym programu. - Metoda
mainakceptuje 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.printorazSystem.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.printiout.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
forznana 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 == string2jest 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ę
switchna ł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.ooputwórz klasęWorldze statyczną funkcjąmain. -
Zaimplementuj metodę
maintak aby wyświetlały się dwa komunikaty:system wystartowałsystem zakończył działanie
-
Uruchom program z p. 7 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
runpowinna informować o tym, że zwierzak idzie do przodu. -
Uruchom program.
-
Rozszerz metodę
runtak 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 lpowinno 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
runnie 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 funkcjimainprzed 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.gradlew sekcjipluginsdodaj linięid 'application':plugins { id 'application' id 'java' } -
W tym samym pliku dodaj sekcję:
application { getMainClass().set('agh.ics.oop.World') } -
Otwórz konsolę (np. terminal/PowerShell).
-
Wywołaj komendę
export JAVA_HOME=/usr/lib/jvm/java-16(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
streamdostępnego w Javie 8.