Palaute

Julkaistu

Harjoitus 1

5) lukujen merkit, Kari. Nollat olivat tehtävässä erikoistapaus, joka jäi osin huomioimatta. Muutamassa ratkaisussa ei huomioitu tilannetta, jossa molemmat luvut ovat nollia ja osassa ratkaisuja tällaisessa tilanteessa kerrottiin etumerkkien olevan erisuuret. Näistä ei rankaistu, koska ensimmäisissä harjoituksissa tarkistajat ottivat hieman rennommin. Operaatioiden nimien tulisi olla informaatiivisia. Esimerkiksi ”operaatio”-nimi ei kerro mitään operaation tarkoituksesta. Yleisiä kommentteja puuttui vielä sekä operaatiolta että ohjelmalta

6) merkkijonojen pituuksien vertailu, Kimmo. Muuttujien nimissä oli vielä jonkin verran lyhyitä tunnuksia, kuten a ja b. Kommentteja oli myös osassa ratkaisuja vähänlaisesti.

7) tehtävä, merkkien haku, Antti. Tarkistajan terveiset:

  • Kiinnittäkää huomiota muuttujien nimeämiseen – kuvaavia ja loogisia nimiä. Liian pitkä muuttujan nimi on epätodennäköisempi ongelma kuin epäselvä muuttujan nimi.
  • Välttäkää for-silmukan päättämistä break-lauseella. Myös for-silmukalle voi antaa useita päätöstehtoja. Esimerkiksi:
    for (int indeksi = 0; indeksi < pituus && jatketaan; indeksi++).

Harjoitus 2

4) merkkijonojen pituuksien vertailu, Antti. Lähes kaikki nollat tulivat siitä, että main-operaatiossa ei ollut vertailuoperaation paluuarvon sijoitusta muuttujaan. Paluuarvon sijoittaminen vaadittiin, koska se on ohjelmoinnissa tarvittava taito ja erityisesti tässä tehtävässä tarpeen, jotta vertailuoperaatiota ei kutsuttaisi ylimääräisä kertoja. Jokainen turha operaatiokutsu hidastaa ohjelmaa, eikä edistä ongelman ratkaisemista. Switch-case-lause ei ole aina paras valinta vertailuihin etenkin, jos erittelee ensin kolme vaihtoehtoa, jotka sulkevat pois kaikki muut vaihtoehdot, jolloin jää auki auki mitä default-kohdassa pitäisi tehdä.

6) ajan tarkistus, Kari. Tämän tehtävän tarkistuksessa oltiin rennompia paluuarvon sijoittamisen suhteen. Nollia annettiin vain, jos operaatiossa itsessään oli tulostuksia. Joissakin ratkaisuissa oli ensin turha operaatiokutsu, jonka jälkeen uusi kutsu missä sijoitettiin paluuarvo. Turhista operaatiokutsuista on vain haittaa myös siinä mielessä, että kokeneempi ohjelman lukija jää turhaan pohtimaan kutsun syytä ennen kuin huomaa, että kutsu on täysin tarpeeton. Tyyliseikkana nousivat esiin vaillinaiset kommetit.

7) merkkijonon toisto, Kimmo.Tämä tehtävä tarkistettiin myös hyvän ohjelmointitavan osalta. Ratkaisussa tuli olla operaation yleinen kommentti, jotta pisteen voi saada. Kaikista hylätyissä ratkaisuissa oli puutteita operaation kommentoinnissa. Sisennyksissä oli jonkin verran korjattavaa, mutta ei siinä määrin, että nollia olisi tullut.

Harjoitus 3

Näissä harjoituksissa aloitettiin hyvän ohjelmointitavan arviointi kaikkien tehtävien osalta. Erityinen huomio kohdistui kommentointiin. Operaation yleinen kommentti oli pakollinen ehto pisteelle. Tämä näkyi aikaisempaa suurempana hylättyjen ratkaisujen määränä.

3) kuukauden nimen lausuminen, Kimmo. Pisteeseen tarvittiin operaatiossa oleva taulukko ja sellainen löytyikin kaikista tarkistetuista tehtävistä. Oman operaation yleinen kommentti puuttui edelleen hyvin usein tai se oli hyvin lyhyt.

5) merkin hakeminen merkkijonosta, Antti. Tarkistus oli tässä tehtävässä tiukin: main-operaatiossa oli oltava paluuarvon sijoitus, jotta pisteen voi saada. Tähänkin asiaan on kiinnitettävä huomiota, koska paluuarvon sijoittaminen on perusohjelmointitekniikka, joka pitäisi olla kurssin jälkeen hyvin hallussa. Antti totesi seuraavaa: Kiinnittäkää huomiota kommentointiin. Kommentin ei tarvitse olla kovin pitkä. Edelleen kutsutaan metodia turhaan kaksi kertaa ja vasta jälkimmäisellä kerralla otetaan paluuarvo vastaan. Useilla puuttuu edelleen paluuarvon sijoittaminen.

6) merkin hakeminen taulukosta, Kari. Nollat tulivat siitä, että operaation yleinen kommentti oli jäänyt kirjoittamatta. Kari antoi muuta palautetta näin:

  • Muutamassa palautuksessa operaation yleinen kommentti oli kopio aiemmasta tehtävästä. Kommentissa kerrottiin operaation hakevan merkkiä merkkijonosta, kun tässä tehtävässä sitä haettiin taulukosta.
  • Muutamassa palautuksessa luettiin rivi Scannerilla ja ensimmäinen merkin poimittiin charAt-operaatiolla ilman, että syötteen pituutta tutkittiin tarkemmin. Näin toimien ohjelmalle voisi antaa myös vaikkapa merkkijonon ”auto”, vaikka syötteen tulisi olla yksi merkki. Muistakaa, että In-luokassa löytyy valmiina readChar-operaatio, jolloin ei ole erikseen tarvetta käyttää readString-operaatiota ja poimia merkkiä samaan tapaan kuin Scanner-luokkaa käytettäessä.

Harjoitus 4

Myös näissä harjoituksissa kiinnitettiin erityistä huomiota kommentointiin. Pisteeseen vaadittiin operaation otsikkoon liittyvä yleinen kommentti.

2) merkiksi muunnos taulukolla, Kari. Kaikista tarkistetuista ratkaisuista löytyi taulukko, kuten pitikin. Nollat tulivat lähinnä puuttuvista kommenteista. Muutama nolla lisäksi siitä, että main-operaatiossa ei ollut paluuarvon sijoitusta muuttujaan. Jokunen ratkaisu oli toisteinen: käyttäjän syötteen oikeellisuus tarkistettiin sekä main-operaatiossa että merkin palauttavassa operaatiossa. Koodin toistamisesta ei sakotettu, mutta yleensä ottaen saman toiminnallisuuden toteuttamiseen kahdesti ei ole tarvetta varsinkin, kun syötteen oikeellisuus voidaan päätellä suoraan operaation paluuarvon avulla.

5) merkin haku taulukosta API-operaatioilla, Kimmo. Javan API-kutsut olivat hyvin hallussa. Kommentteja oli paremmin kuin aikaisemmin. Jonkin verran näkyi vielä huonosti nimettyjä muuttujia ja sisennyksissä oli hieman heittoa.

7) kaksiulotteisen taulukon tulostaminen, Antti. Nollat tulivat puutteellisen kommentoinnin vuoksi.Tästä tehtävästä ei muuta erityisempää sanottavaa.

Harjoitus 5

Pisteeseen vaadittiin operaation otsikkoon liittyvä yleinen kommentti.

1) attribuuttien poisto, Antti. Korjattavaksi annetun ohjelman perusrakenne oli säilynyt hyvin attribuutteja poistettaessa. Muutama ratkaisu hylättiin skandinaavisten kirjainten (å, ä ja ö) vaillinaiseen käsittelyyn liittyen. Käyttöjärjestelmien erilaiset merkistöt ja niiden aiheuttamat ongelmat ovat tulleet pikkuhiljaa tutuiksi syyslukukauden aikana, mutta edelleen on muistettava valita omalle käyttöjärjestelmälle sopivassa merkistössä oleva tiedosto, kun vaihtoehtoja on tarjolla ja tallentaa lähdekoodi oman koneen käyttöjärjestelmän merkistökoodausta käyttäen, jos tarjolla on vain vieraassa merkistössä oleva tiedosto. Jälkimmäinen koskee erityisesti Mac- ja Linux-käyttäjiä, koska osa kurssilla julkaistusta lähdekoodista on ollut tarjolla vain Windows 1252 -merkistössä.

3) taulukon täyttö merkeillä, Kari. Hylättyjen töiden yhteinen nimittäjä oli operaatiosta puuttuva yleinen kommentti, joka pitäisi kirjoittaa, jotta operaation käyttäjä näkee nopeasti koodia lukematta mitä operaatio tekee ja miten sitä kutsutaan. Operaation kommentti on nopeasti tehty hyvä teko.

6) tiedoston rivien laskeminen, Kimmo. Tehtävä tehty kokonaisuutena hyvin ja ja koodi oli siistiä. Kommentteja löytyi hyvin, mutta niiden laatu vaihteli. Nollat tulivat Karin tarkistaman tehtävän tapaan operaation otsikkoon liittyvän yleisen kommentin unohtumisista.

Harjoitus 6

Pisteeseen vaadittiin operaation otsikkoon liittyvä yleinen kommentti.

3) taulukon muunnos toiseksi, Kimmo. Ratkaisuissa oli logiikka pääosin kohdallaan. Joukossa oli muutama turhan monimutkainen (ylimääräisiä silmukoita) sisältävä ratkaisu. Kommentteja oli jo hyvin. Muutamalla opiskelijalla oli vielä hieman ongelmaa sisennyksissä. Ei opettajan toimesta hylättyjä ratkaisuja.

4) taulukon sisällön tallentaminen, Antti. Koodi oli pääosin kunnossa. Monella palauttajalla oli sisäkkäisten tarkistusten seurauksena tarpeettoman monta sisennystasoa ja sisällöltään samaa else-lohkoa virheilmoitukselle. Kannattaa kiinnittää huomiota siihen, että tehtävässä on vain yksi negatiivinen lopputulema, johon voidaan saapua monen tarkistuksen kautta. Sisäkkäisiä valintarakenteita ja sisennystasoja voidaan poistaa yhdistämällä tarkistettavia ehtoja. Joskus jo pelkästään if-lauseen ehdon vertailu true-arvon (if (ehto == true)…, lyhemmin if (ehto)…) asemasta false-arvoon (if (ehto == false)…, lyhemmin if (!ehto)…) saattaa auttaa poistamaan yhden sisennyskerroksen. Ei opettajan toimesta hylättyjä ratkaisuja.

5) rekursiivinen potenssi, Kari. Muutaman ohjelman rakenteessa oli tarpeetonta monimutkaisuutta jakolaskun muodossa. Rakenteen vuoksi hylättiin ratkaisut, joissa oli käytetty Math.pow-operaatiota, mihin ei ole tarvetta jo lähtökohtaisesti, kun ohjelman rakenteen tulee olla rekursiivinen. Silmukkaa käyttäviä ratkaisuja ei löytynyt, kuten pitikin. Tyylin vuoksi hylätyille ratkaisuille oli yhteistä operaation yleisen kommentin unohtuminen.