Üheksas praktikum

Juhend

  1. Luguge Jaanuse kirjeldus läbi.
  2. Teha enda projektikataloogs alamkataloog (package) nimega ahelad.
  3. Sinna kataloogi panna failid Element.java, Elements.java ning TestElements.java.
  4. 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.
  5. 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:

  1. Minu versioon failist Element.java peab olema seal kataloogis, et testid töötaksid. (Seal on operatsioonide loendur ja equals meetod.)
  2. Meetodi keha tõsta faili Elements.java
  3. Teisendada kõiksugused this.meetod() ahel1.meetod() (ehk lihtsalt meetod() → ahel1.meetod())
  4. Väljade asemel kasutata votaMeetod(), st voti → votaVoti()
  5. 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.