Tehtävän 3 arvostelusta Tehtävästä sai pisteitä seuraavasti: * ohjelman perusrakenne: 4 p * tiedoston käsittely: 4 p * HashMap-rakenteen käsittely: 4 p Kohdassa "ohjelman perusrakenne" arvioitiin ohjelmaa kokonaisuutena: tehdäänkö siinä järkeviä asioita järkevässä järjestyksessä ja onko muuttujien, ehtojen ja silmukoiden käyttötapa oikeanlainen. Kohdassa "tiedoston käsittely" arvioitiin yksityiskohtia File- ja Scanner-olioiden käytössä. Ohjelman täytyi tarkistaa tiedoston olemassaolo ja varautua Scanner-olion poikkeukseen. Kohdassa "HashMap-rakenteen käsittely" arvioitiin yksityiskohtia HashMap-rakenteen käytössä. Luontevin tapa käyttää HashMap-rakennetta tehtävässä on alla olevassa esimerkkikoodissa. Tehtävä oli osattu yleisesti ottaen hyvin. Seuraavassa on yksi tapa ratkaista tehtävä: import java.io.*; import java.util.*; public class LaskeSanojenMaara { public static void main(String[] args) { Scanner lukija = new Scanner(System.in); String tiedostonNimi; File tiedosto; Scanner tiedostonLukija; HashMap maarat = new HashMap(); while (true) { System.out.println("Mitä tiedostoa tutkitaan? " + "(tyhjä merkkijono keskeyttää ohjelman)"); tiedostonNimi = lukija.nextLine(); if (tiedostonNimi.equals("")) return; tiedosto = new File(tiedostonNimi); if (tiedosto.exists()) break; System.out.println("Tiedostoa " + tiedostonNimi + " ei löytynyt!"); } try { tiedostonLukija = new Scanner(tiedosto); } catch (Exception e) { System.out.println("Tiedostoa " + tiedostonNimi + " ei voi käsitellä!"); return; } while (true) { System.out.println("Anna tutkittava sana " + "(tyhjä merkkijono lopettaa sanojen lisäämisen)"); String sana = lukija.nextLine(); if (sana.equals("")) break; maarat.put(sana, 0); } while (tiedostonLukija.hasNext()) { String sana = tiedostonLukija.next(); if (maarat.containsKey(sana)) { int vanha = maarat.get(sana); maarat.put(sana, vanha + 1); } } System.out.println("Tiedoston " + tiedostonNimi + " analyysi:"); System.out.println(maarat); } }