Üheksas praktikum
- Ahelate ühildamine
- Algoritmide keerukus
- JUnit ikka veel
Juhend
- Luguge
Jaanuse
kirjeldus läbi.
- Teha enda projektikataloogs alamkataloog (package) nimega ahelad.
- Sinna kataloogi panna failid
Element.java, Elements.java ning
TestElements.java.
- Implementeerida Elements.java faili yhilda meetod. NB! See on
klassimeetod. Meetodi signatuur on teistsugune võrreldes Jaanuse esialgse
ülesandega. Käitumine on ka natuke teine, kuna mina tahaks saada uue ahela.
Argumendid jäävad nii, nagu nad enne olid.
- Vaadake, et testSimple() ja testComplexity() läheksid läbi... Teised
testid võiksid ka töötada, aga ei pea. JUnit kohta on info endiselt
siin.
NB! Muuta tohib ainult failis Elements.java -- teised peavad jääma nii
nagu nad on!
Kui alustasite Jaanuse isendimeetodiga:
- Minu versioon failist Element.java peab olema seal kataloogis, et testid
töötaksid. (Seal on operatsioonide loendur ja equals meetod.)
- Meetodi keha tõsta faili Elements.java
- Teisendada kõiksugused this.meetod() →
ahel1.meetod() (ehk lihtsalt meetod() →
ahel1.meetod())
- Väljade asemel kasutata votaMeetod(), st
voti → votaVoti()
- isendimeetodi interpretatsioon on natuke
teistsugune. Ühele ahelale lisatakse juurde. Klassimeetodi puhul luuakse uus
list. Üks minu testidest ebaõnnestub, kui listid on muudatud. See ei ole
suur probleem, sest tähtsam on see, et testSimple ja testComplexity läheksid
läbi... See koht on TestElements.java koodis ära märgitud.
Ma proovisin Jaanuse poolt pakutud
näidislahenduse selle raamistikuga. Selleks oli mul ainult vaja kaks rida muuta,
kus ta omistas j1 = this ning j2 = e -- kõik testid läksid läbi, v.a.
NullPointerException esimese argumendi järgi. Tal oli vaja 7503 operatsioone, et
ühildada 2500 elementi, mis on suht optimaalne. Seda arvu saab vähendada,
kasutades ajutiseid muutujaid (sest loendatakse votaVõti() meetodi järgi), aga
see muidugi ei tähenda, et algoritm on kiirem. 2x 3x on kõik ok... aga tüüpiline
lahendus, mida mulle saadetakse, nõuab 2 miljonit operatsioone! See enam ei ole
OK.