Ćwiczenie 7 - Java – Błędy i wyjątki
Zadania do wykonania:
Commit6_3. Błędny wybór
Commit6_4. Zmodyfikować metodę Parse w kasie Student.
Zadanie dodatkowe 1 (dla zainteresowanych):
Dodać kasowanie wybranego studenta z bazy.
Zadanie dodatkowe 2 (dla zainteresowanych):
1. Utworzyć nowy projekt z kategorii Java, typ Java Application.
2. W metodzie main dodać kod działający wg algorytmu:
1. Zadeklarować zmienną o nawie zbiory klasy ArrayList, która będzie przechowywać kolejne zbiory wczytane z pliku (punkt 1.2.).
2. Zadeklarować zmienną o nazwie zbiór klasy HashSet, która będzie przechowywać elementy zbioru (punkt 1.2.).
3. Utworzyć nowy obiekt klasy ArrayList przypisać referencje do niego do zmiennej utworzonej w kroku 1 algorytmu (punkt 1.2.).
4. Utworzyć skaner dla pliku z danymi (punkt 1.6.).
5. Ustawić separator pól skanera z kroku 4 algorytmu na znak przejścia do nowej linii (punkt 1.8.). Znak ten zwraca instrukcja:
System.getProperty("line.separator")
6. Zadeklarować zmienną typu tekstowego (klasy String) i przypisać do niej wyrażenie regularne opisujące linię z pliku danymi (punkt 1.7.).
7. Używając skanera, pobierać z pliku linie pasujące do wyrażenia regularnego z kroku 6 algorytmu (punkt 1.6.).
8. Dla każdej pobranej linii:
1. Wyświetlić pobraną linię.
2. Utworzyć nowy obiekt klasy HashSet i przypisać referencje do niego do zmiennej utworzonej w punkcie 2 algorytmu (punkt 1.2.).
3. Usunąć 1 i ostatni znak pobranej linii (punkt 1.9.) - są to nawiasy { i }.
4. Utworzyć skaner wczytanej linii (punkt 1.8.).
5. Ustawić separator pól skanera z kroku 8.4 na przecinek. Pobierać kolejne elementy zbioru i dodawać je do zmiennej z p. 2 algorytmu (punkt 1.4.).
6. Po utworzeniu całego zbioru dodać go do listy z p. 1 algorytmu.
9. Używając iteratorów wyświetlić zawartość listy i zbiorów, które są na niej (punkt 1.5.). Wynik powinien mieć następujący format:
{a, b, c}
{x1, x2}
Zadanie dodatkowe 3 (dla zainteresowanych):
Zadaniem programu jest wczytanie danych z pliku, obliczenie iloczynu kartezjańskiego i wyświetlenie wyniku. Mamy więc 2 zupełnie różne zadania:
1.Wczytanie danych z pliku tekstowego i zamiana ich na odpowiednie obiekty.
2.Obliczenie iloczynu kartezjańskiego.
W celu realizacji tych zadań utworzymy 2 klasy: OdczytDanych i IloczynKartezjański. Klasa OdczytDanych wygląda następująco:
Pola:
nazwa pliku, z którego mają być odczytane dane
lista zbiorów odczytanych z pliku
Metody
get i set dla pól
metoda odczytująca dane z pliku
Klasa IloczynKartezjański wygląda następująco:
Pola:
lista zbiorów, z których obliczymy iloczyn kartezjański
wynik obliczeń (typu zbiór)
Metody:
get i set dla pól
metoda obliczająca iloczyn kartezjański
Algorytm obliczania iloczynu kartezjańskiego (do metody main) jest następujący:
1.Utwórz nowy obiekt odczytDanych klasy OdczytDanych.
2.Ustaw plik, z którego będą odczytane zbiory.
3.Odczytaj dane z pliku.
4.Pobierz listę zbiorów z obiektu odczytDanych.
5.Utwórz nowy obiekt iloczynKartezjański klasy IloczynKartezjański.
6.Ustaw listę zbiorów, z których obliczymy iloczyn kartezjański.
7.Wykonaj obliczenia.
8.Pobierz wynik z obiektu iloczynKartezjański.
9.Wyświetl wynik.
Wskazówki do wykonania ćwiczenia
Obliczanie iloczynu kartezjańskiego N zbiorów można wykonać wykorzystując właściwość rozdzielności tej operacji. Na początek utwórzmy metodę obliczającą iloczyn kartezjański dwóch zbiorów:
protected HashSet oblicz2zb(HashSet z1, HashSet z2) {
HashSet wynik;
// utwórz nowy obiekt klasy Set i zapisz referencję do wynik
// dla każdego elementu e1 zbioru z1:
// dla każdego elementu e2 zbioru z2:
// dodaj do zbioru wynikowego tekst e1,e2
return wynik;
}
Teraz utworzymy właściwą metodę obliczającą iloczyn kartezjański:
public void oblicz() {
//sprawdź, czy na liście zbiorów są przynajmniej 2 zbiory
//oblicz IK dwóch pierwszych zbiorów z listy i zapamiętaj wynik
//dla każdego zbioru Z z listy zbiorów, zaczynając od 3:
//oblicz IK wyniku poprzednich obliczeń
// i zbioru Z, zapamiętaj wynik
}
Iteracje po zbiorach lub listach możemy wykonać przy pomocy instrukcji:
for(Object e: zbior) { // e to kolejny element zbioru .... }
Iteracje po listach możemy wykonać przy pomocy instrukcji:
for(i = 2; i<lista.size(); i++) { Object element = lista.get(i); .... }
Może zajść potrzeba rzutowania typu, używamy wtedy konstrukcji:
Set zbior = (HashSet ) lista.get(i);