JO, k99, välikoe 2, tehtävä 2, arvosteluperusteet Antti Tuominen, 5.5.1999 Tehtävä: ======== Laadi metodi int muutaIntiksi(String jono), jonka arvo on parametrina annettu merkkijono muutettuna kokonaisluvuksi. On virhe, jos merkkijonossa on mitä tahansa muita merkkejä kuin numeroita. Tuolloin metodi palauttaa arvon -1. Javassa on valmiitakin välineitä merkkijonon muuntamiseen lukuarvoksi, mutta tämä tehtävä on ratkaistava "omin käsin": siirrä merkkijono ensin char[]-taulukkoon, tutki siellä jonon kelvollisuus ja laske kelvollisen jonon numeroarvo. Vihjeitä: o Numeromerkeillä on peräkkäiset merkkikoodit siten, että '0'+1=='1', '1'+1=='2', '2'+1=='3', ... Niinpä numeromerkki saadaan muutettua vastaavaksi luvuksi kaavalla merkki-'0'. o Muunnosalgoritmin idea on seuraava: luku = 0; toista joka numeromerkille ensimmäisestä alkaen luku = 10*luku + numeromerkki lukuna; (6 pistettä) Tulokset: ========= -: ****** 0: **** 1: ***** 2: *********** 3: **************** 4: *************** 5: ******************************** 6: ************ Malliratkaisu: ============== // Kutsujan harteille jää antaa ei-null parametri, // tyhjä merkkijono palauttaa nollan, miinus ykköstäkin // olisi voinut palautella. public static int muutaIntiksi(String jono) { char taulu[] = jono.toCharArray(); int luku = 0; for(int i=0; i < taulu.length; i++) if(taulu[i] < '0' || taulu[i] > '9') return -1; else luku = luku * 10 + taulu[i] - '0'; return luku; } Arvostelu: ========== Yritin olla tiukahko arvostelussa, koska tehtävä oli jo laskareista tuttu ja lisäksi vihjeet kertoivat jo pitkälti, miten homma hoituu. Oleellisin asia tehtävässä oli ymmärtää kokonaisluvun ja numeron näköisen merkin ero. Tehtävässä päästään myös testaamaan taulukko- jenkäsittelytaitoja. Tyypillisiä 2 pisteen fiboja: - Merkkien kelvollisuutta ei tarkisteta. (Eli että merkki on numeromerkki, '0'...'9'.) - Vastauksessa sotketaan esim. 0 ja '0' keskenään siten, että vastaajan ei voi olettaa ymmärtävän niiden eroa. (Merkkijonon "merkki - '0'" kopiointi tehtäväpaperista ei siis riitä.) Tyypillisiä 1 pisteen fiboja: - Static puuttuu. Metodia ei ole järkevää tehdä ilmentymämetodiksi, koska sen toiminta ei kosketa kyseisen luokan mahdollisia ilmen- tymiä. Tämä fiba tipautti aimo kasan kuuden pisteen vastauksia viitosiksi, mikä näkyy myös jakaumassa yllä. - Merkin kelvollisuustarkistus toimii väärin. - Ei käytetä char-taulukkoa, vaikka tehtäväpaperissa käsketään.