Witam!
Próbuję zrobić TreeSet, ale już na samym początku jest błąd w kodzie. Problem zaczął się po utworzeniu metody dodaj() w klasie Firma.
Zdaję sobie sprawę, że powinno się ustawić niektóre zmienne jako prywatne i używać getterów, ale świadomie tego nie robiłem. Jeżeli jest coś w tym kodzie "niezgodnego z paradygmatami programowania"(poza tym, o którym wspomniałem wcześniej) albo po prostu da się lepiej to mile widziane są wszystkie uwagi.(w pewnych granicach, ponieważ jestem dopiero początkującym i pewnie nie zrozumiem zbyt zaawansowanych "ulepszeń")
import java.util.*;
class Pracownik
{
String nazwisko;
double etat;
Pracownik(String nazwisko, double etat)
{
this.nazwisko=nazwisko;
this.etat=etat;
}
public String toString()
{
return ("Nazwisko: "+nazwisko+" Etat: "+etat);
}
}
class Urzednik extends Pracownik
{
double podstawowa, premia;
Urzednik(String nazwisko, double etat, double podstawowa,double premia)
{
super(nazwisko,etat);
this.premia=premia;
this.podstawowa=podstawowa;
}
public double wyplata()
{
return(podstawowa*etat+podstawowa*etat*premia);
}
public String toString()
{
String baza=super.toString();
return(baza+"wyplata: "+wyplata());
}
}
class Robotnik extends Pracownik
{
double liczbaGodzin,stawkaGodzinowa;
int LIMIT=100;
Robotnik(String nazwisko, double etat,
double liczbaGodzin, double stawkaGodzinowa)
{
super(nazwisko,etat);
this.liczbaGodzin=liczbaGodzin;
this.stawkaGodzinowa=stawkaGodzinowa;
}
public double wyplata()
{
double wyp;
if(liczbaGodzin>LIMIT)
wyp=liczbaGodzin*stawkaGodzinowa+
(liczbaGodzin-LIMIT)*1.5*stawkaGodzinowa;
else
wyp=liczbaGodzin*stawkaGodzinowa;
return wyp;
}
public String toString()
{
String baza=super.toString();
return(baza+"wyplata: "+wyplata());
}
}
class Firma {
TreeSet<Pracownik> ts = new TreeSet<Pracownik>();
public void dodaj(Pracownik prac) {
ts.add(prac);
System.out.println("Dodano");
}
}
public class Main
{
public static void main(String args[])
{
Firma fi = new Firma();
Robotnik r0 = new Robotnik("Marchewka",1.0,99,10.0);
Robotnik r1 = new Robotnik("Kasztan",1.5,115,9.0);
Robotnik r2 = new Robotnik("Ziemniak",1.0,101,11.0);
Urzednik u0 = new Urzednik("Jablko",0.5,1000,0.15);
Urzednik u1 = new Urzednik("Truskawka",1.5,4000,0.25);
Urzednik u2 = new Urzednik("Sliwka",1,2000,0.55);
fi.dodaj(r0);
fi.dodaj(r1);
fi.dodaj(r2);
}
}
edit: Błąd z konsoli:
Exception in thread "main" java.lang.ClassCastException: Robotnik cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(TreeMap.java:1294)
at java.util.TreeMap.put(TreeMap.java:538)
at java.util.TreeSet.add(TreeSet.java:255)
at Firma.dodaj(Main.java:73)
at Main.main(Main.java:91)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)