Tällä rästitehtävällä voit korvata yhden kierroksista 7, 8 tai 9. Jos sinulta puuttuu minimipisteet kahdelta näistä kierroksista, sinun pitää tehdä sekä tämä tehtävä että rästitehtävä 1 tai 2. Jos sinulta puuttuu minimipisteet kaikilta näiltä kierroksilta, tee kaikki rästitehtävät. Jotta rästitehtävä korvaisi tehtäväkierroksen, siitä on saatava vähintään 300 pistettä. Vaikka saisit tehtävästä enemmän pisteitä, niin harjoitustehtäväarvosanaa määrättäessä tällä tehtävällä korvatun kierroksen pistemääräksi lasketaan kuitenkin vain korvattavan kierroksen minimipistemäärä.
Tutustu valmiiksi annettuihin luokkin
Puhelintieto ja
Puhelinluettelo.
Luokat ovat myös Eclipse-projektissa
tehtava10_3
yhdessä ratkaisun testaamisen tarkoitetun tiedoston
puhelinnumerot1.txt
kanssa.
ATK-keskuksen UNIX-koneissa projekti on tallennettu
hakemistoon /p/edu/tik-106.1206
. Näitä luokkia ei ole
selitetty tehtävänannossa tarkemmin, vaan sinun pitää tutustua luokkiin
itse niiden koodin ja metodien kommenttien perusteella.
Sinun tehtävänäsi on kirjoittaa käyttöliittymäluokka Puhelinluettelo-luokalle samaan tapaan kuin tehtävässä 6.3 kirjoitettiin käyttöliittymäluokka Kompleksiluku2-luokalle. Erona tässä tehtävässä on kuitenkin se, että puhelinluettelon lähtötiedot luetaan tiedostosta ja että Scanner-luokkaa ei saa käyttää tämän tehtävän ratkaisussa lainkaan. Anna käyttöliittymäluokkasi nimeksi Numerotiedustelu.java. Kirjoita se samaan projektiin valmiina annettujen tiedostojen kanssa.
Ohjelmasi lukee käytettävän puhelinluettelon tiedot komentoriviparametrina annettavasta tiedostosta. Tiedostossa puhelinnumerot on annettu siten, että jokaisella rivillä on aina yksi nimi, sen jälkeen kaksoispiste ja tämän jälkeen nimeen kuuluva puhelinnumero. Voit katsoa mallia tiedostosta puhelinnumerot1.txt. Voit luottaa siihen, että jos tiedosto on olemassa, siinä on rivejä ja sitä pystytään lukemaan, niin tiedoston rivit ovat virheettömässä muodossa.
Määrittele luokalle Numerotiedustelu seuraavat kentät:
Kirjoita sitten luokkaan seuraavat konstruktori ja metodit (katso esimerkkiajoista, millaisia ohjelmasi tulostusten pitää täsmällisesti olla):
Jos parametrina annetun nimen mukaista tiedostoa ei löydy, metodi tulostaa "Puhelinluettelotiedostoa ei loydy!" ja palauttaa arvon false. (Käytä tiedoston olemassaolon tutkimiseen File-luokan exists-metodia.) Jos tiedoston lukemisessa joku virhe aihettaa IOException-tyyppisen poikkeuksen, metodi tulostaa "Puhelinluettelotiedoston lukeminen ei onnistu!" ja palauttaa arvon false.
Jos tiedoston avaaminen onnistui, mutta tiedosto on tyhjä, metodi palauttaa arvon false, mutta ei tulosta mitään.
Kun teet tiedostosta luetuista riveistä Puhelintieto-olioita, voit käyttää apuna String-luokan split-metodia erottamaan nimet ja puhelinnumerot toisistaan. Katso lisätietoja kierroksen 9 tehtävästä 1.
Kuten aikaisemmissakin tehtävissä, kaikki virheilmoitukset tulostetaan stardarditulosvirtaan eli virheilmoitusten tulostamisessa käytetään käskyä System.out.println sen sijaan, että käytettäisiin käskyä System.err.println.
Puhelinluettelo, valitse toiminto: 1. Lisaa rivi luetteloon 2. Hae numero 3. Vaihda numero 4. Tulosta luettelo 5. LopetaTämän jälkeen metodi lukee käyttäjän antaman valinnan (kokonaisluvun) ja palauttaa sen.
Huomautuksia:
Palauta Gobliniin tiedosto Numerotiedustelu.java.
[ohjelman käynnistetään komentoriviparametrilla puhelinnumerot1.txt] Puhelinluettelo, valitse toiminto: 1. Lisaa rivi luetteloon 2. Hae numero 3. Vaihda numero 4. Tulosta luettelo 5. Lopeta 4 Luettelon tiedot: Ahonen Minna: 050-112277 Virtanen Jesse: 040-8866991 Makela Riku: 045-1234876 Mustala Tatu: 09-3576419 Heikkila Heikki: 09-4488664 Markkula Anna: 09-4488664 Puhelinluettelo, valitse toiminto: 1. Lisaa rivi luetteloon 2. Hae numero 3. Vaihda numero 4. Tulosta luettelo 5. Lopeta 0 Puhelinluettelo, valitse toiminto: 1. Lisaa rivi luetteloon 2. Hae numero 3. Vaihda numero 4. Tulosta luettelo 5. Lopeta 6 Puhelinluettelo, valitse toiminto: 1. Lisaa rivi luetteloon 2. Hae numero 3. Vaihda numero 4. Tulosta luettelo 5. Lopeta 1 Anna luetteloon lisattava nimi. Virta Esko Anna luetteloon lisattava numero. 09-6539861 Lisays onnistui. Puhelinluettelo, valitse toiminto: 1. Lisaa rivi luetteloon 2. Hae numero 3. Vaihda numero 4. Tulosta luettelo 5. Lopeta 4 Luettelon tiedot: Ahonen Minna: 050-112277 Virtanen Jesse: 040-8866991 Makela Riku: 045-1234876 Mustala Tatu: 09-3576419 Heikkila Heikki: 09-4488664 Markkula Anna: 09-4488664 Virta Esko: 09-6539861 Puhelinluettelo, valitse toiminto: 1. Lisaa rivi luetteloon 2. Hae numero 3. Vaihda numero 4. Tulosta luettelo 5. Lopeta 1 Anna luetteloon lisattava nimi. Makela Riku Anna luetteloon lisattava numero. 040-1144667 Numeroa ei voitu lisata. Puhelinluettelo, valitse toiminto: 1. Lisaa rivi luetteloon 2. Hae numero 3. Vaihda numero 4. Tulosta luettelo 5. Lopeta 3 Kenen numeron haluat vaihtaa? Makela Riku Anna uusi puhelinnumero. 040-1144667 Puhelinnumero vaihdettiin. Puhelinluettelo, valitse toiminto: 1. Lisaa rivi luetteloon 2. Hae numero 3. Vaihda numero 4. Tulosta luettelo 5. Lopeta 4 Luettelon tiedot: Ahonen Minna: 050-112277 Virtanen Jesse: 040-8866991 Makela Riku: 040-1144667 Mustala Tatu: 09-3576419 Heikkila Heikki: 09-4488664 Markkula Anna: 09-4488664 Virta Esko: 09-6539861 Puhelinluettelo, valitse toiminto: 1. Lisaa rivi luetteloon 2. Hae numero 3. Vaihda numero 4. Tulosta luettelo 5. Lopeta 2 Kenen numeron haluat hakea? Heikkila Heikki Puhelinnumero on 09-4488664 Puhelinluettelo, valitse toiminto: 1. Lisaa rivi luetteloon 2. Hae numero 3. Vaihda numero 4. Tulosta luettelo 5. Lopeta 2 Kenen numeron haluat hakea? Olematon Oskari Nimea ei ole luettelossa! Puhelinluettelo, valitse toiminto: 1. Lisaa rivi luetteloon 2. Hae numero 3. Vaihda numero 4. Tulosta luettelo 5. Lopeta 3 Kenen numeron haluat vaihtaa? Olematon Oskari Anna uusi puhelinnumero. 000-000000 Numeron vaihto ei onnistunut! Puhelinluettelo, valitse toiminto: 1. Lisaa rivi luetteloon 2. Hae numero 3. Vaihda numero 4. Tulosta luettelo 5. Lopeta 4 Luettelon tiedot: Ahonen Minna: 050-112277 Virtanen Jesse: 040-8866991 Makela Riku: 040-1144667 Mustala Tatu: 09-3576419 Heikkila Heikki: 09-4488664 Markkula Anna: 09-4488664 Virta Esko: 09-6539861 Puhelinluettelo, valitse toiminto: 1. Lisaa rivi luetteloon 2. Hae numero 3. Vaihda numero 4. Tulosta luettelo 5. Lopeta 5 [ohjelman suoritus päättyy] [ohjelman käynnistetään komentoriviparametrilla puhelinnumerot2.txt tiedosto on olemassa, mutta se on tyhjä.] Puhelinluettelon lukeminen ei onnistunut. [ohjelman suoritus päättyy] [ohjelman käynnistetään komentoriviparametrilla puhelinnumerot3.txt tiedosto on olemassa, mutta ohjelmalla ei ole oikeuksia lukea sitä.] Puhelinluettelotiedoston lukeminen ei onnistu! Puhelinluettelon lukeminen ei onnistunut. [ohjelman suoritus päättyy] [ohjelman käynnistetään ilman komentoriviparametreja.] Ohjelmalle pitaa antaa tasmalleen yksi komentoriviparametri! [ohjelman suoritus päättyy]
Värikoodit:
Sininen: Syöte käyttäjältä
Vihreä: Ohjelman tuloste
Punainen: Erityishuomatus: ei tulosteta