WPR lato 2002

advertisement
Napisać klasę reprezentującą Osobę która będzie posiadała pola wiek, nazwisko, czykobieta, ileOsob
(pole mówiące ile mamy aktualnie stworzonych obiektów Osoba)
Zadanie 0
Napisać klasę testową, która będzie miała metody pozwalające na dodanie nowego obiektu,
usunięcie i edycję obiektu z kolekcji typu List.
Wyświetlić informacje z kolekcji wykorzystując pętlę for oraz Iterator.
Dodatkowo proszę skorzystać z nowej możliwości J2SE 1.5 - szablony generics
Sprawdzić w dokumentacji różnice miedzy najpopularniejszymi implementacjami list czyli
klasami ArrayList, LinkedList, Vector
Zadanie 1
Napisz program który na danej liście L liczb całkowitych znajduje element najmniejszy
i element największy i tworzy nowe listy Lmin i Lmax zawierające odpowiednio
wszystkie elementy najmniejsze i wszystkie elementy największe obecne na L.
Zakładamy że na liście mogą występować powtarzające się elementy.
Zadanie 2
Napisać własną klasę SortList implementującą interfejs List. Zaimplementować wszystkie
wymagane metody. Zasada działania ma być identyczna jak dla klasy ArrayList.
Zmodyfikować metody wstawiającą (add) tak by uwzględniała automatycznie posortowanie
kolekcji.
Zadanie 3
Zdefiniuj klasę StosLiczb opisującą strukturę danych typu LIFO(last-in,first-out)
do przechowywania liczb całkowitych a w niej funkcje :
create() - utwórz pusty stos
push() – włóż element na stos
pop() - pobierz element ze stosu
peek() - obejrzyj element z wierzchołka bez pobierania
isEmpty() – czy stos jest pusty
isFull() - czy stos jest pełny
show() – wyświetla zawartość
Strukturę danych zrealizuj przy pomocy tablicy i przetestuj klasę StosLiczb.
W tej implementacji klasa StosLiczb powinna zawierać 3 pola:
int[] tab; // tablica elementów
int top; // indeks wierzchołka stosu
int size; // rozmiar stosu
Uporządkuj elementy w kolejce przechowującej liczby całkowite używając :
a) dwóch pomocniczych kolejek i kilku zmiennych
b) jednej pomocniczej kolejki i kilku zmiennych
Zadanie 4
Napisz program który wstawia do zbioru HashSet 50 liczb w nieuporządkowanej kolejności.
Napisz następnie metodę sortującą ten zbiór i wyświetlającą posortowany zbiór
Zadanie 5
Utwórz i przetestuj klasę MySet opisującą zbiór i podstawowe operacje na zbiorach:
- sumę
- różnicę
- część wspólną
- zawieranie się zbiorów
- należenie elementu do zbioru
Zakładamy że elementy zbioru nie mogą się powtarzać.
Wykorzystaj klasy TreeSet lub HashSet.
{A,A,A,B,B,C} + {A,A,C} ={ A,A,A,A,A,B,B,C,C}
{A,A,A,B,B,C} - {A,A,C} ={ A,B,B}
Zadania z wykładu
Zadanie 1. Tworzenie i przetwarzanie prostych kolekcji
Napisać program, który tworzy różne kolekcje listowe (typu List) i zbiorowe (typu Set)
napisów i liczb, podanych w dwóch tablicach o równych rozmiarach. Napisy i liczby (ściślej:
referencje do nich) mają być dodawane do każdej z kolekcji na przemian (najpierw napis,
później liczba).
Na kolekcjach przeprowadzić następujące operacje: skonkatenować wszystkie łańcuchy
znakowe, zsumować wszystkie liczby.
Wyprowadzić wyniki tych operacji dla każdej z kolekcji, poprzedzone informacją o tym jaka
to kolekcja i jakie elementy zawiera.
Zapewnić minimum kodowania (operacje dodawania do konkretnej kolekcji oraz jej
przetwarzania wyodrębnić w oddzielnych metodach).
Przykład:
dwie tablice napisów i liczb:
String[] s = { "ala", "kot", "pies", "zebra", "ala" };
int[] num = { 1, 2, 7, 9, 2 };
przedstawiono w programie w postaci dwóch konkretnych kolekcji: ArrayList i HashSet.
Wynik działania programu:
Kolekcja java.util.ArrayList
[ala, 1, kot, 2, pies, 7, zebra, 9, ala, 2]
Konkatenacja: ala kot pies zebra ala
Suma: 21
Kolekcja java.util.HashSet
[9, pies, zebra, 7, ala, kot, 2, 1]
Konkatenacja: pies zebra ala kot
Suma: 19
Pomoc: -(material spoza wykladu) nazwę klasy obiektu obj można uzyskać poprzez odwołanie obj.getClass().getName() [
zwraca napis = nazwa klasy]
Pytania i dodatkowe zadania:




dlaczego utworzone kolekcje HashSet i ArrayList różnią się między sobą?
jak najłatwiej zmienić implementację listy z ArrayList na LinkedList? Pokazać kod.
co się stanie jeśli w tym programie za pomocą takich samych środków jak w
przypadku list i HashSet będziemy próbować tworzyć kolekcję TreeSet? Dlaczego ?
co trzeba zrobić, żeby utworzenie kolekcji TreeSet powiodło się i jakie będzie ona
miała własności?
A propos ostatniego pytania musimy uzyskać wydruk podobny do następującego:
Kolekcja java.util.ArrayList
[ala, 1, kot, 2, pies, 7, zebra, 9, ala, 2]
Konkatenacja: ala kot pies zebra ala
Suma: 21
Kolekcja java.util.HashSet
[9, pies, zebra, 7, ala, kot, 2, 1]
Konkatenacja: pies zebra ala kot
Suma: 19
Kolekcja java.util.TreeSet
[1, 2, 7, 9, ala, kot, pies, zebra]
Konkatenacja: ala kot pies zebra
Suma: 19
Zadanie 2. Algorytmy i mapy
Napisac program, ktory z pliku tekstowego (podanego jako argument) wczytuje dane o
pracownikach (imie, nazwisko, rok urodzenia, zarobki), a nastepnie wyprowadza informacje o
nich:



posortowane wg nazwisk i imion
posortowane wg zarobkow
na zyczenie - po podaniu w dialogu wejsciowym nazwiska i imienia - nazwisko i imie
oraz zarobki dla danego pracownika.
Uwagi:





uzyskiwanie informacji o konkretnym pracowniku (po podaniu jego nazwiska i
imienia) zapewnić poprzez odpowiednią implementację mapy,
zabezpieczyć się przed powtarzającymi się nazwisko+imię (w mapie),
w standardowej wersji programu (to wystarczy) wszystkie informacje wyprowadzamy
na konsole,
w rozbudowanej wersji programu posortowane informacje kierować do pliku
wyjściowego, a zapytania o konkretnych pracownikach przedstawiać jako komunikaty
typu messageDialog
w standardowej wersji programu przy powtórzeniach nazwisko+imie przerywac
program, w rozbudowanej wersji zapewnić mechanizm sensownej obsługi powtórzeń.
Pomoc:




potrzebna odrębna klasa reprezentująca atrybuty pracowników (imie, nazwisko, rok
urodzenia, zarobek), ich uzyskiwanie i pokazywanie oraz naturalny porządek
sortowania wg : nazwisko+imię
tylko listy dają się sortować
jednoczesne przechowywanie referencji do obiektów na liście i w mapie nie jest
niczym złym
naturalny porządek można łamać za pomocą Comparatora
Przykład:
Wydruk z programu po wczytaniu danych z przykładowego pliku
i podaniu w dialogu wejściowym :
Sonia Ala
Zwierz Staefen (błąd!)
Zwierz Stefan (poprawienie błędu)
Wydruk;
W porzadku alfabetycznym:
Albanski Albin 1978 2300
Jankowski Jan 1975 1500
Jemioluszka Anna 1945 4500
Kowalski Jan 1980 2000
Sonia Ala 1957 3000
Zwierz Stefan 1968 2500
--------------------------------------Wedlug zarobkow:
Jankowski Jan 1975 1500
Kowalski Jan 1980 2000
Albanski Albin 1978 2300
Zwierz Stefan 1968 2500
Sonia Ala 1957 3000
Jemioluszka Anna 1945 4500
--------------------------------------Informacje w trybie interaktywnym (po podaniu nazwiska i imienia):
Sonia Ala 3000
Not such worker: Zwierz Staefan
Zwierz Stefan 2500
Download