Twoja Lista nie jest dobrze zaprojektowana. Z zewnątrz powinna wyglądać z grubsza tak:
Kopiuj
class Lista
{
Dodaj()
Usuń()
Wyświetl()
}
Metody typu dodajPierwszy czy dodajKolejnyElement powinny być prywatne, to jest problem List żeby dodać poprawnie element.
Kopiuj
public void DodajElement()
{
if ( this.Pusta() )
dodajPierwszyElement()
else
dodajKolejnyElement()
}
Lista.dodajAuto() też mi się nie podoba, czy jesteś pewien że metody tego typu powinny być w Liście? Jak na moje Lista powinna tylko i wyłącznie przechowywać Samochody, a nie jest tworzyć. I jeszcze jedno paskudne zagranie...
Kopiuj
public void dodajPierwszy(){
if(czyPusta()){
Element nowy = new Element(dodajAuto());
poczatek = nowy;
koniec = nowy;
rozmiarListy++;
}
}
To jest bardzo, ale to bardzo brzydki kod... Jeżeli ktoś wywołuje niepustą listę, to co wtedy? Widać, że wywołanie tej metody, gdy lista zawiera cokolwiek jest BŁĘDEM, ale Ty tego błędu:
- nie obsługujesz
- nie informujesz wywołującego
Dorzuć else w którym rzucisz wyjątkiem. Taki kod często kończy się tym, że przez godzinę siedzisz i się zastanawiasz "czemu to nie działa pomimo że nie ma żadnego błędu?". Niektóre metody NIE POTRAFIĄ obsłużyć błędu i wtedy powinny go przekazać wyżej. To trochę jakbyś miał "błędoodporną" metodę która ma policzyć pierwiastek kwadratowy
Kopiuj
if ( argument < 0 )
return 0;
....
Niby fajnie, bo się nie wysypie na nieprawidłowych argumentach... z drugiej nie zadziała poprawnie, ani nikogo nie poinformuje o błędnym użyciu. Miłego debuggingu...
EDIT:
Co do samego błędu, to pewnie źle dodajesz. Masz elementy:
A, B,C, E
I chcesz dodać D = bieżący.
Musisz znaleźć element za którym chcesz dodać czyli C = poprzedni, i potrzebujesz znaleźć ten który obecnie jest za C czyli następny = C.WeźNastępny() = E.
No i teraz bierzesz:
bieżący.UstawPoprzedni( poprzedni )
bieżący.UstawNastepny(nastepny)
poprzedni.UstawNastepny(bieżący)
następny.UstawPoprzedni(bieżący).