Spis treści
Silnia z obsługą ujemnych liczb¶
Napisz metodę, która będzie zwracać silnię podanej jako argument liczby. Metoda powinna rzucać wyjątek rodzaju Checked zdefiniowanego przez Ciebie typu BlednaWartoscDlaSilniException, gdy jej argument będzie ujemny. Skorzystaj z tej metody w main, obsługując potencjalny wyjątek.
Klasa Adres z walidacją danych¶
Napisz program z klasą Adres, która będzie miała podane poniżej pola, które będą ustawiane w konstruktorze klasy Adres. Konstruktor powinien sprawdzić wszystkie podane wartości i rzucić wyjątek NieprawidlowyAdresException rodzaju Checked, jeżeli któraś z wartości będzie nieprawidłowa. Uwaga: komunikat rzucanego wyjątku powinien zawierać informację o wszystkich nieprawidłowych wartościach przekazanych do konstruktora – dla przykładu, jeżeli ulica i miasto będą miały wartość null, to komunikat wyjątku powinien być następujący: "Ulica nie może być nullem. Miasto nie może być nullem". Pola klasy:
- String ulica – wartość nieprawidłowa to null,
- int numerDomu – wartość nieprawidłowa to liczba <= 0,
- String kodPocztowy – wartość nieprawidłowa to null,
- String miasto – wartość nieprawidłowa to null.
Liczba znaków w pliku¶
Skorzystaj z try-with-resources w programie, które pobierze od użytkownika lokalizację pliku z rozszerzeniem .txt na dysku, a następnie wypisze na ekran liczbę znaków, z których składa się ten plik. Weź pod uwagę, że podany przez użytkownik plik może nie istnieć lub być plikiem o innym rozszerzeniu. Skorzystaj z klas File oraz FileReader.
Uwaga: wynik liczenia znaków nie będzie się zgadzał z liczbą widocznych w pliku znaków. Na końcu każdej linii, po której następuje kolejna linia, znajdują się (w systemie Windows) dwa dodatkowe znaki końca linii. Weź to pod uwagę testując swój program (w systemie Linux będzie to jeden dodatkowy znak na linię). Pamiętaj także, że spacje i tabulatory to także znaki!
Implementacja stosu¶
Stos to rodzaj kolekcji do przechowywania danych typu FILO – First In, Last Out. Gdy dodajemy na stos kilka elementów, to mamy jedynie dostęp do tego ostatniego. Jeżeli chcemy odnieść się do pierwszego dodanego na stos elementu, musimy najpierw "zdjąć" elementy dodane na stos po nim – stąd określenie First In, Last Out. Stos można porównać do kartek położonych jedna na drugiej – jeżeli chcemy kartkę ze spodu stosu, to musimy najpierw zdjąć kartki leżące na niej.
Napisz klasę Stack (w opisie poniżej nazywaną stosem). Ma ona za zadanie przechowywać liczby typu int. Klasa Stack powinna posiadać:
- Konstruktor, który przyjmuje jako argument liczbę typu int – maksymalną liczbę elementów, które ten stos może przechowywać. Jeżeli podamy ujemną liczbę, powinien zostać rzucony wyjątek IllegalArgumentException.
- Metody:
- push – dodaje przekazaną jako argument liczbę typu int do stosu, jeżeli jest w nim jeszcze miejsce – jeżeli nie, rzuca nowy zdefiniowany wyjątek rodzaju Unchecked o nazwie StackFullException,
- pop – usuwa ze stosu ostatnio dodany element i zwraca go – jeżeli stos był pusty, rzuca nowy zdefiniowany wyjątek rodzaju Unchecked o nazwie StackEmptyException,
- clear – czyści stos,
- top – zwraca ostatnio dodany do stosu element – jeżeli stos był pusty, rzuca wyjątek typu StackEmptyException,
- size – zwraca liczbę elementów aktualnie przechowywanych w stosie.
Utwórz kilka obiektów typu Stack i przetestuj ich działanie. Obsłuż w try..catch potencjalne wyjątki.