Tämä Git-repositorio sisältää Eclipse-projektin, jota voit käyttää pohjana Map-harjoitusten tekemisessä. Kloonaa tämä Git-repositorio itsellesi Eclipseen valitsemalla File-valikosta:
File → Import → Git → Projects From Git → Clone URI
Sytä Eclipsen Source Git Repository -dialogin URI-kenttään tämän Git-projektin osoite: https://github.com/ohjelmointi2/postinumerot.git
. Tarvittaessa löydät tarkempia ohjeita projektin kloonaamiseksi Googlella.
❌ Mikäli projekti on Eclipsessä täynnä virheitä, kuten "Test cannot be resolved to a type" ja "The import org.junit cannot be resolved", Eclipse-versiosi on vanhentunut. Asenna uusi Eclipse-versio kurssin ohjeiden mukaisesti.
Molemmissa tehtävissä tarvittava Map-tietorakenne luodaan valmiin luePostinumerot()
-metodin avulla. Kyseinen metodi muodostaa Postin postinumeroaineistosta Map-tietorakenteen, jossa postinumerot toimivat avaimina ja postitoimipaikkojen nimet toimivat arvoina:
{93830=Rukatunturi, 68874=Smartpost, 66210=Molpe, 87150=Kajaani, 92500=Rantsila ... }
Sekä avainten että arvojen tietotyyppi on String
, eli metodin paluuarvo voidaan ottaa talteen Map<String, String>
-tyyppiseen muuttujaan:
Map<String, String> postinumeroMap = luePostinumerot();
Varmista valmiiksi annetun koodin toimivuus omalla koneellasi suorittamalla projektiin kuuluvat testit. Voit suorittaa testit Eclipsessä klikkaamalla projektia Package-näkymässä hiiren kakkospainikkeella ja valitsemalla "Run As"-kohdasta vaihtoehdon "JUnit Test". Eclipsen pitäisi suorittaa seuraavat kaksi testiluokkaa onnistuneesti:
Testeissä varmistetaan muunmuassa, että ääkkösiä sisältävät toimipaikkojen nimet saadaan luettua tiedostosta oikein:
@Test
public void skandimerkitLuetaanTiedostostaOikein() {
Map<String, String> postinumeroMap = Postinumerot.luePostinumerot();
String polja = postinumeroMap.get("71820");
assertEquals("Pöljä", polja);
}
Syvennymme yksikkötestaamiseen tarkemmin kurssin seuraavilla viikoilla, joten emme perehdy testien tekniseen toteutukseen vielä tätä tarkemmin.
Lue käyttäjän syöttämä postinumero ja tulosta sitä vastaava postitoimipaikan nimi. Mikäli postinumeroa ei löydy aineistosta, tulosta teksti "Postinumeroa ei löytynyt."
Esimerkkisuoritus:
Syötä postinumero: 00100
Helsinki
Tarkemman tehtävänannon sekä vinkit logiikan toteuttamiseksi löydät Ohjelmointi 2 -kurssin Viopesta.
Lue käyttäjän syöttämä postitoimipaikan nimi ja tulosta kaikki postinumerot, jotka kuuluvat kyseiseen postitoimipaikkaan.
Toisin kuin edellisessä tehtävässä, tässä ongelmaa ei voida ratkaista tarkistamalla arvoa suoraan yksittäisen avaimen avulla. Sen sijaan sinun tulee käydä koko Map-tietorakenne läpi ja etsiä kaikki postinumerot, eli avaimet, joiden arvo vastaa käyttäjän antamaa merkkijonoa. Löydät vinkkejä Map-tietorakenteen läpikäyntiin esimerkiksi artikkelista "How to iterate any Map in Java".
Tulosteessa postinumeroiden tulee olla kasvavassa järjestyksessä pilkuilla eroteltuna, joten kerää postinumerot ensin listalle, jonka järjestät ennen tulostamista. Järjestäminen voidaan tehdä esimerkiksi Collections.sort-metodilla.
Mikäli annetulle postitoimipaikalle ei löydy lainkaan postinumeroita, tulosta "Postinumeroita ei löytynyt."
Esimerkkisuoritus:
Syötä postitoimipaikka: Porvoo
Postinumerot: 06100, 06101, 06150, 06151, 06200, 06400, 06401, 06450, 06500
Tarkemman tehtävänannon sekä vinkit logiikan toteuttamiseksi löydät Ohjelmointi 2 -kurssin Viopesta.
Tässä projektissa hyödynnettävä postinumeroaineisto postinumerot.csv on muodostettu https://github.com/theikkila/postinumerot-projektin postcode_map_light.json-tiedostosta 23.3.2021.
Datan tekijänoikeudet kuuluvat Postille ja niitä käytetään Postin käyttöehtojen mukaisesti. Mikäli teet kopioita tästä aineistosta, huolehdi käyttöehtojen noudattamisesta.
Tämän tehtävän on kehittänyt Teemu Havulinna ja se on lisensoitu Creative Commons BY-NC-SA -lisenssillä.