Problem z remove dla kilku wpisów

0

Witam,
mam problem otóż, posiadam kod który usuwa wszystkie appointemnty oprócz ostatniego. Kod zamieszczam pod spodem:

public void remove2()
    {   
        Appointment appToRem=new Appointment();
        boolean flag=true;
        System.out.print("On which day do you want remove appointments? ");
        Scanner in=new Scanner(System.in);
        String d=in.next();
        appToRem.setDate(d);
        for (int i=0;i<appointments.size();i++){
            if (appointments.get(i).equals(appToRem)){
            appointments.remove(i);
            flag=true;
            System.out.println("Appointments removed");
        }
        if(flag==false)
        System.out.println("There is no appointments on this day");
        }
    }

Nie wiem dlaczego pozostaje mi zawsze ostatnie appointment. prosiłbym o szybką odpowiedź i rozwiązanie mojego problemu.
Pozdrawiam.

0

Może dlatego że warunek appointments.get(i).equals(appToRem) nie jest spełniony.
Weź podepnij debugger w tym miejscu i sprawdź czy wszystkie Appoimenty spełniają warunek.

0

sprawdzałem debungerem i on ez póxniej mija ten ostatni apointments i twierdzi że nie jest on equals do szukanej zmiennej, no ale to nie mozliwe bo to jest dosłownie kopia wcześniejszych.

0

Hm... rzeczywiście... Jednak przyszła mi do głowy jeszcze jedna możliwość. Czy metodę equals() sam pisałeś czy jest domyślna?

0

jest chyba domyślna, bo tylko w innej klasie appointments mam wlasną equals, oto ona:

public boolean equals(Appointment other)
    {
        if((this.date).equals (other.date))
        return true;
        else
        return false;
    }
0

No właśnie. Skoro zatem masz dwie różne klasy Appointment (zakładam że są to dwie różne klasy dziedziczące po jakiejś abstrakcyjnej) to może dojść do sytuacji w której porównujesz dwa obiekty w nieprawidłowy sposób.

0

Tego typu usuwanie nigdy nie będzie działać tak, jak to sobie założyłeś.

Zastanów się nad taką rzeczą - cod dzieje się z rozmiarem listy gdy usuwasz z niej element, a następnie zwróć uwagę na to, że ten rozmiar limituje Ci ilość obiegów pętli. Metoda equals nie ma tutaj nic do rzeczy.

HTH

0

@gzrewal, masz rację... ech... późno było. Zamiast for (i, i<x, i++) użytć należy konstrukcji

for (Appointment a : appointments)

)

0

Przy usuwaniu dużo lepiej jest użyć pętle w drugą stronę

for(int i=cos_tam.size()-1;i>=0;i--)
{
    ...
}
0

@last_post - oto chodzi, kwestia przeczytania dokładnie dokumentacji do metody remove - bo przecież oprócz zmniejszania rozmiaru listy przesuwa ona elementy stojąca za usuwanym tak by nie zostawały "puste" miejsca.

Pzdr, </b>

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