From: Tommi K Rajala Date: Wed, 20 Nov 2002 11:24:10 +0200 (EET) Tehtävä 2: MinMax-kone Arvostelu oli vähentävä, eli joka virheestä vähennettiin pisteitä. Mikäli näin pistemääräksi tuli alle 4, arvostelu muuttuikin lisääväksi, kuitenkin niin, ettei yli neljää pistettä saanut lisäävällä tavalla. Virhekategoriat: A: Luokassa oli System.out.println -kutsuja jossain muualla kuin main-metodissa: -2 pistettä (24 kpl) B: Muuttujat esiteltiin konstruktorissa, tai muuttujat esiteltiin _myös_ konstruktorissa: -2 pistettä (8 kpl) C: Joku muuttujista jäi alustamatta. Tämä ei itse asiassa haittaa, mikäli kunto-muuttujan alkuarvona käytettiin falsea, sillä doublen oletusalkuarvo on 0.0 ja booleanin false. Niinpä ei varsinainen virhe: +/-0 pistettä (6 kpl) D: Kunnossa- tai kirjaa-metodi tarkastaa alkutilan väärin. Käytännössä siis tarkistettiin, onko min==0 ja max==0. Tällöin kone ei kuitenkaan toimi nolla-syötteillä: -4 pistettä (32 kpl) E: Nollaa-metodi kutsuu konstruktoria: -2 pistettä (1 kpl) F: Alkutilan korvaava kertalaskuri toimii väärin: -2 pistettä (1 kpl) G: Kirjaa-metodissa ei tarkisteta alkutilaa lainkaan: -4 pistettä (29 kpl) H: Kunnossa-metodi palauttaa väärinpäin. Vaikka kuinka olisi koodiin kommentoinut, kuinka "kunnossa-metodi palauttaa true silloin kun kone ei ole kunnossa", ei toteutusta hyväksytty: -2 pistettä (23 kpl) I: kirjaaLämpötila(double) tai kirjaaLämpötila(uusi) tai kirjaaLämpötila(): -2 pistettä (21 kpl) J: Kirjaa-metodi (tai joku muu) kutsuu Lue-luokkaa: -2 pistettä (19 kpl) K: Jotain muuttujaa ei esitellä mutta käytetään: -2 pistettä (5 kpl) L: Nollaa-metodi ei nollaa alkutilaa. -2 pistettä (7 kpl) M: Alkutila-muuttujaa ei päivitetä kirjaa-metodissa: -2 pistettä (8 kpl) N: Koodissa seassa (tai koko koodi) kokonaan isoilla kirjaimilla kirjoitettuja sanoja, kuten FALSE, ELSE. Java kuitenkin on case-sensitive: -2 pistettä (5 kpl) O: Joku palauttava metodi (minimi, maksimi, kunnossa) ei palauta arvoa. Virhe myös jos palauttaa vain joskus: -2 pistettä (12 kpl) P: Kirjaa-metodi ei kirjaa lämpotilaa ensimmäisellä kerralla: -2 pistettä (1 kpl) Q: main-metodi. Tämä ei tietenkään ole virhe, mutta muuten vain turhaa työtä. Main-metodin toteutus ei vaikuttanut mitenkään arvosteluun: sitä ei edes luettu. Ilmeisesti joillain oli kokeessa ylimääräistä aikaa, tai he muuten vaan tykkäävät kynä&paperi-koodauksesta: +/-0 pistettä (28 kpl) X: Jotain muuta outoa (ja väärin toimivaa) -2 pistettä (X: 29 kpl, XX: 4 kpl) _X_: Kirjaa-metodissa ongelmia nolla-syötteellä (tai jotain vastaavaa): -4 pistettä (6 kpl) Papereita, joissa virheet D ja G: 9 kpl. Papereita, jotka menivät alle 4 pisteen virheiden takia: 17 kpl. Papereita, joihin ei edes yritetty vähentävää pisteytystä: 16 kpl. Muutamassa paperissa kaikkia arvoja yritettiin kerätä taulukkoon. Mikäli moisen sai onnistumaan ja ohjelman toimimaan ohjeiden mukaisesti, ei tästä tietenkään vähennetty pisteitä. Main-metodin lisäksi joissain papereissa tehtävää oli ylitehty myös siten, että muistissa pidettiin myös toiseksi pienin ja toiseksi suurin arvo. Tämä on myös ok, mikäli homma toimii. Myös toString()-metodia ja joitain muita ylimääräisiä juttuja löytyi joistain papereista. Niitä käsiteltiin kuten main-metodia: koska niitä ei pyydetty, ei niitä luettu edes läpi eivätkä ne vaikuttaneet arvosteluun. Monessa paperissa yritettiin tulla toimeen ilman alkutila-muuttujaa. Tämän olisi saanut toimimaan ainoastaan siten, että min ja max olisi alustettu (ja nollattu) siten, että min>max. Tehtävänannossa kuitenkin määriteltiin, että alkutilassa molemmilla on arvo 0.0, joten tämäkin olisi ollut väärin. Eipä tätä kyllä kukaan yrittänytkään esittää... Minimi- ja maksimi-metodien ei pitänyt tutkia alkutilan arvoa ja palauttaa alkutilassa jotain muuta kuin 0.0. Kaikkia pieniä virheitä papereista ei poimittu: - puuttuvat kaarisulut sieltä täältä ihan ok - puuttuvat puolipisteet samoin - konstruktorin signaturen sulkujen puute ei haitannut - == ja = tulkittiin samaksi - 0,0 ja 0.0 kelpasivat kumpikin - muut vastaavat eli siis kaikki ne pienet jutut, joiden etsiminen kaikista papereista ei olisi ollut mahdollista, joten edes löydettyihin ei puututtu. Kuitenkin mikäli paperissa oli unohdettu, että kyseessä on Java ja kirjoitettu vaikka "bool" eikä "boolean", kyseessä oli virhekategoria X. -------------------------------------------------------------- Pistejakauma (yksi lukutaidoton puuttuu tilastoista): 12 - 116 xxxxxxxxxXxxxxxxxxxXxxxxxxxxxXxxxxxxxxxXxxxxxxxxxXxxxxxxxxxXxxxxxxxxxXxxxxxxxxxXxxxxxxxxxXxxxxxxxxxXxxxxxxxxxXxxxxxx 11 - 0 10 - 38 xxxxxxxxxXxxxxxxxxxXxxxxxxxxxXxxxxxxxx 9 - 0 8 - 41 xxxxxxxxxXxxxxxxxxxXxxxxxxxxxXxxxxxxxxxXx 7 - 0 6 - 14 xxxxxxxxxXxxxx 5 - 0 4 - 22 xxxxxxxxxXxxxxxxxxxXxx 3 - 1 x 2 - 6 xxxxxx 1 - 4 xxxx 0 - 13 xxxxxxxxxXxxx Yhteensä: 255 Keskiarvo: 8,98 Mediaani: 10 Nolla pistettä saaneista ainoastaan yksi palautti täysin tyhjän paperin. -------------------------------------------------------------- class MinMax { private double min; private double max; private boolean alkutila; public MinMax() { nollaa(); } public void kirjaaLämpötila(double uusi) { if(alkutila) { min = uusi; max = uusi; alkutila = false; } else { if(uusimax) max = uusi; } } public double minimi() { return min; } public double maksimi() { return max; } public void nollaa() { min = 0.0; max = 0.0; alkutila = true; } public boolean kunnossa() { return !alkutila; } }