Tablica jako zbiór liczb

0

Witam

Dopiero zaczynam moją przygodę z programowaniem, stąd być może moje pytanie jest dość trywialne. Otóż mam za zadanie stworzyć najpierw klasę pt. "SetInt", w której zainicjuje 20 elementową tablicę, następnie stworze konstruktor, metody:
a) dodającą liczby do tablicy
b) pokazującą liczby
c) sumującą ilość elementów tablicy.

Następnie utworze program pt. "Test1", w której odwołam się do klasy SetInt, zainicjuje podwójnie liczby od 0 do 9 (czyli dwukrotnie umieszczę 0, dwukrotnie 1 etc.). I tu najważniejsze warunki, z którymi mam kłopot - mimo wpisania do tablic liczb podwójnie mają być one wyświetlane pojedynczo (np. mimo, iż w "Test1" dałbym xx.dodaj(1) i xx.dodaj(1) to powinno wyświetlać tylko jedną jedynkę) i 0 może być elementem zbioru. Do tego program ma nie wyświetlać pustych elementów tablicy (czyli powiedzmy jakbym w "Test1" dodał tylko (1), (0), (2), (2), (0) to powinien wyświetlić tylko: 1,0,2). Jedyne co udało mi się osiągnąć to to, żeby nie dublował liczb, nie wyświetlał zbędnych zer, jednak z wyjątkiem - zera się dublują. Być może brzmi to bardzo niejasno, dlatego zamisze kod, który udało mi się napisać:

Klasa SetInt:

http://pastebin.com/QFxAc7b8

Test1:

http://pastebin.com/rvUpF9P4

(W teście dałem mniej liczb nie powinienem, żeby póki co łatwiej sprawdzać czy wszystko jest ok, dodatkowo wiem, że jest źle w metodzie sumującej (że przy warunku tab[i]!=0 nie będzie mi doliczało tych wypełnionych zerem, ale nie mam pomysłu jak to inaczej zrobić), więc prosiłbym w razie możliwości, żeby pomocne rady dotyczyły tego jak to ma wyglądać idealnie.

Z góry dzięki!

0

Koszmar jeśli chodzi o optymalność :P
Zwykle Sety robi się na bazie drzewa binarnego albo tablicy hashującej żeby szybko sprawdzać czy element zbioru już istnieje. Od biedny mógłbyś trzymać to posortowane i szukać połówkowo.
Jeśli chodzi o twój główny problem to sprawa jest oczywista: twój pomysł z oznaczaniem 0 elementów "pustych" jest bez sensu skoro 0 może być jedną z liczb ;]
Jak to rozwiązać? Proponuje zrobić sobie na przykład listę indeksów pod którymi są poprawne liczby. Różnica jest taka że w tej liście każdą ujemną wartość możesz uznawać za "pusty element".

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