Witam.
Mam dwie klasy: Club oraz Membership.
Klasa Membership definiuje obiekty które zawierają nazwę członka, datę wstąpienia miesiąc, oraz osobno rok czyli pola typu: String, int, int. Posiada też metodę public int getMonth zwracającą wymieniony wcześniej miesiąc. Kodem coś takiego:
public class Membership
{
private String name;
private int month;
private int year;
public Membership(String name, int month, int year)
throws IllegalArgumentException
{
if(month < 1 || month > 12) {
throw new IllegalArgumentException(
"Month " + month + " out of range. Must be in the range 1 ... 12");
}
this.name = name;
this.month = month;
this.year = year;
}
public int getMonth()
{
return month;
}
Klasa Club korzysta z klasy Members tworząc tablicę do której dodawane są obiekty klasy Membership:
public class Club
{
private ArrayList memberList;
public Club()
{
memberList = new ArrayList ();
}
public void join(Membership member)
{
memberList.add(member);
}
Moim prostym zadaniem jest sprawdzenie obiektów w tablicy pod względem miesiąca wstąpienia czyli standardowo pętla wywołująca obiekty w tablicy po kolei w klasie Club:
public int joinedInMonth(int month)
{
// sprawdz wszyskich i zwroc tych ktorzy dolaczyli w podanym miesiacu
if (month<1 || month>12)
{
System.out.println ("Given month is not valid");
return 0;
}
int index = 0;
int numberOfJoins =0;
while (index < memberList.size())
{
Membership memberTemp = ( Membership) memberList.get(index);
int monthOfMember = memberTemp.getMonth();
if (monthOfMember == month) numberOfJoins++;
index++;
}
return numberOfJoins;
}
Jak widać w pętli tworzony jest za każdym razem obiekt memberTemp do którego przekazywany jest obiekt z tablicy i później porównanie jego pola z podanym miesiącem itd. Rozwiązanie działa ale nie rozumiem dlaczego nie można dostać się szybko do pola obiektu np. w ten sposób (jak wcześniej próbowałem):
int numberOfJoins = memberList.get(index).getMonth();
czyli generalnie logicznie i prościej. Kompilator wtedy zwraca że nie rozpoznaje metody getMonth()?