Implementacja kolekcji

Odpowiedz Nowy wątek
2013-03-29 16:14
0

Zaimplementuj kolekcje przechowującą elementy w kolejności rosnącej wraz z metodami (lub własciwosciami) dodania elementu, pobrania elementu (z jego usunięciem) oraz wypisania wszystkich elementów. Przyjmij, ze przy pobieraniu elementu pobierany jest zawsze najmniejszy. Załóż, ze elementy przechowywane w tej kolekcji musza implementować interfejs umożliwiajacy porównywanie elementów (może to być standardowy interfejsComparable<t>).
Zaimplementuj również dowolna hierarchie klas implementującą interfejs Comparable<t> (lub inny zaproponowana przez Ciebie), zawierająca przynajmniej cztery klasy. Może to być np. hierarchia klas reprezentująca stopnie wojskowe bądz klasy reprezentujące najważniejsze stanowiska Rzeczpospolitej Polskiej (wynik porównania ma odzwierciedlać tzw. precedencje).
Zwróć uwagę, aby implementacja tej hierarchii klas przestrzegała zasady otwarte–zamknięte, tj. aby można było dodać klasę (np. reprezentująca nowy stopień wojskowy) implementujaca Comparable<t> bez konieczności zmiany implementacji w pozostałych klasach.

Niestety kompletnie nie rozumiem treści zadania. Co ja konkretnie mam zaimplementować? Listę dwukierunkową przechowującą dowolne typy, czyli np. class Lista<t> { ... } ?

Pozostało 580 znaków

2013-03-29 16:34
0

Raczej

List<T extends Comparable<T>>

Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2013-03-29 16:38
mućka
0

Masz zaimplementowac kolekcje ktora przechowuje obiekty ktore implementuja jakis interfejs ktory sluzy do porownania. Masz przyjac ze zawsze pobierany jest najmniejszy element, zatem jest to raczej kolejka priorytetowa niz lista, wzglednie mozesz zrobic 'sortowany multiset', czyli taki zbior, ktory umie sortowac wg tego interfejsu, zwraca zawsze pierwszy (najmniejszy) element, a jak jest kilka elementow o takiej samej wartosci, to zwraca obojetnie ktory z nich (lub np. wg. kolejnosci dodania). Takie cos mozna zrobic tak ze elementu zbioru sa nie pojedynczymi elementami a kolekcjami elementow.

Pozostało 580 znaków

2013-03-29 17:49
0
Shalom napisał(a):

Raczej

List<T extends Comparable<T>>

Chodzi o to, aby T miało zaimplementowany mechanizm do porównywania elementów?
Jeśli zaś chodzi o samą implementację listy, będzie to wyglądało tak, że mam wskaźniki na powiedzmy pierwszy i ostatni element i dalej standardowo?

I jeszcze jedno, w jaki sposób mam zaimplementować funkcję wypisującą elementy listy skoro nie wiem czym jest T ? Coś takiego nie przechodzi (choć w c# było ok)

    public void wyswietl()
    {
        Wezel<T> pomoc = poczatek;
        while (pomoc != null)
        {
            System.out.Println(pomoc.t);
            pomoc = pomoc.pobierzNastepny();
        }
    }
edytowany 1x, ostatnio: tomekz1991, 2013-03-29 17:50

Pozostało 580 znaków

2013-03-29 21:41
0

o_O a skąd niby kompilator ma mieć pewność że obiekt T ma pole t do którego się chcesz odwołać? o_O Albo metodę pobierzNastępny()? Musisz tam dać jakiś interfejs (oprócz comparable) dla tego T...


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 1x, ostatnio: Shalom, 2013-03-29 21:41

Pozostało 580 znaków

2013-03-29 22:27
0

Bo mam klasę Węzeł

class Wezel<T> 
{
    public T t;
    public Wezel<T> nastepny;
    public Wezel<T> poprzedni;

    public Wezel() 
    {
        nastepny = null;
        poprzedni = null;
    }

    public Wezel(T t, Wezel<T> nastepny, Wezel<T> poprzedni) 
    {
        this.t = t;
        this.nastepny = nastepny;
        this.poprzedni = poprzedni;
    }

    public T pobierzT() 
    {
        return this.t;
    }

    public Wezel<T> pobierzNastepny() 
    {
        return nastepny;
    }

    public void ustawNastepny(Wezel<T> nastepny) 
    {
        this.nastepny = nastepny;
    }

    public Wezel<T> pobierzPoprzedni() 
    {
        return poprzedni;
    }

    public void ustawPoprzedni(Wezel<T> poprzedni) 
    {
        this.poprzedni = poprzedni;
    }
}

i teraz klasa lista wygląda tak:

class Lista<T>
{
    public Wezel<T> poczatek;
    public Wezel<T> koniec;

    public Lista()
    {
        poczatek = null;
        koniec = null;
    }

    public boolean czyPusta()
    {
        return (poczatek == null);
    }

    public int rozmiar()
    {
        Wezel<T> pomoc = poczatek;
        int i = 0;
        while (pomoc != null)
        {
            i++;
            pomoc = pomoc.pobierzNastepny();
        }
        return i;
    }

...

}
edytowany 1x, ostatnio: tomekz1991, 2013-03-29 22:28
no i co się tu nie kompiluje? jaki jest log błędu? - Shalom 2013-03-29 22:41

Pozostało 580 znaków

2013-03-29 22:33
mućka
0

Ja bym powiedzial ze sie nie kompiluje bo masz w System.out.Println() Println() z wielkiej litery...

Pozostało 580 znaków

2013-03-30 10:34
cys
0

Nie znasz metod kolekcji takich jak: .size() i isEmpty() ?

Według mnie metody czyPusta(), rozmiar() są do napisania od nowa :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0