Tässä harjoituksessa perehdytään syöttöön ja tulostukseen sekä
merkkijonojen käsittelyyn. Keskeiset Java API:n luokat ovat
java.lang.String
sekä pakkauksen java.io
luokat.
Tämän ohjelmointiharjoituksen maksimipistemäärä on 100 ja läpäisyraja on 50 pistettä.
Kopioi ensin itsellesi tiedosto tehtava4.jar
ja pura se:
lynx -source http://www.cs.hut.fi/u/lma/kevytOLO/Tehtavat/Harjoitukset/Harjoitus4/tehtava4.jar > tehtava4.jar jar xvf tehtava4.jar
Tuloksena saat alihakemiston Tehtava4
, jossa on
tiedostot Example.java
, Game.java
,
GameStoppedException.java
, Named.java
,
Person.java
, Player.java
,
Room.java
, Thing.java
ja input.txt
.
Jos Java-pääohjelman rakenne ja pääohjelman argumenttien
käsittely ei ole tuttua, kannattaa ennen harjoitustehtävien
tekemistä tutustua tiedostoon Example.java
. Luokka
sisältää yksinkertaisen pääohjelman, joka tulostaa saamansa
argumentit. Käännä ohjelma ja kokeile sitä esim. seuraavasti:
java Example java Example hii haa hoo java Example 1.0 plus 1.5 is 2.5
Tee luokka CopyInputToOutput
, jonka pääohjelma
kopioi standard inputin standard outputiin muuttamatta sitä
mitenkään.
Käännä ja testaa ohjelmasi. Voit käyttää syötteenä
tiedostoa input.txt
ja unixin komentoa diff
seuraavasti:
java CopyInputToOutput < input.txt > output.txt diff input.txt output.txt rm output.txt
Komento diff
tulostaa mahdolliset erot tiedostojen
input.txt
ja output.txt
välillä.
Mitään eroja ei pitäisi olla.
Tehtävä on muuten sama kuin kohdassa 4.1, mutta nyt kopioidaankin tiedosto toiseksi tiedostoksi.
Tee luokka CopyFile
, jonka pääohjelma
saa kaksi argumenttia, jotka ovat tiedoston nimiä.
Pääohjelma kopioi ensimmäisen argumentin nimeämän tiedoston
toisen argumentin nimeämään tiedostoon.
Käännä ja testaa ohjelmasi.
java CopyFile input.txt output.txt diff input.txt output.txt
Taaskaan mitään eroja ei pitäisi olla.
Tee luokka Fgrep
, jonka pääohjelma
saa argumenttina merkkijonon x.
Pääohjelma lukee standard inputin rivi kerrallaan ja tulostaa
vain ne rivit, joilla argumenttina annettu merkkijono x
esiintyy.
Käännä ja testaa ohjelmasi. Voit käyttää syötteenä
tiedostoa input.txt
ja unixin komentoa fgrep
seuraavasti:
java Fgrep into < input.txt fgrep into < input.txt
Komennon fgrep
pitäisi tulostaa samat rivit
kuin sinun ohjelmasi.
Tee luokka WordCount
, jonka pääohjelma lukee
standard inputin ja tulostaa,
kuinka monta riviä, merkkiä ja sanaa se sisältää.
Sanoiksi lasketaan maksimaaliset merkkijonot, jotka eivät
sisällä tyhjiä merkkejä (välilyönti, tabulaattori,
rivinvaihto ym.). Luokan Character
staattisella metodilla isWhitespace
voi testata, onko merkki tyhjä.
Käännä ja testaa ohjelmasi. Voit käyttää syötteenä
tiedostoa input.txt
ja unixin komentoa wc
seuraavasti:
java Wc < input.txt wc < input.txt
Komennon wc
pitäisi antaa samat luvut kuin
sinun ohjelmasi.
Tässä tehtävässä laaditaan yksinkertainen komentotulkki seikkailupeliin. Peli koostuu huoneista, esineistä ja henkilöistä. Huoneet voivat olla kytkettyjä toisiinsa. Kytkentään liittyy merkkijonona esitettävä suunta. Pelin pelaaja on henkilöluokan aliluokka.
Tiedostossa tehtava4.jar
on peliin
liittyvät valmiit Java-tiedostot:
GameStoppedException
, pelin pysäyttävä poikkeus.Named.java
, nimellä varustettujen olioiden
luokka (esineet, henkilöt ja huoneet on varustettu nimellä)Thing.java
, esineiden luokkaPerson.java
, henkilöiden luokkaRoom.java
, huoneiden luokkasekä puolivalmiit tiedostot
Player.java
, pelin pelaajaa kuvaava luokkaGame.java
, peliluokka
Tehtävänäsi on kirjoittaa pelaajalle komentotulkki. Luokkaan
Game
sinun pitää täydentää pääohjelmametodi
main
, joka
muodostaa uuden pelin ja suorittaa sen.
Player
metodin action
ja luokan Game
metodin play
toteutuksiin.
Player
metodi tokenize
, joka paloittelee käyttäjän
antaman syöterivin erillisiksi sanoiksi.
Player
metodi
interpreter
,
joka tulkitsee käyttäjän antaman komennon. Interpreter tuntee
seuraavat komennot:
Room
metodia toString()
.
Person
metodia
getThings
.
Person
metodia move
.
Person
metodia pickUp
.
Person
metodia putDown
.
GameStoppedException
.
false
, muuten arvo true
.
Game
pääohjelmametodi main
. Luo pääohjelmassa muutamia huoneita,
esineitä ja henkilöitä. Luo myös pelaaja-olio. Muista lisätä
huoneet ja henkilöt (myös pelaaja) Game
-olioon.
Pääohjelman lopussa kutsutaan metodia play
, joka
käynnistää pelaamisen.
Harjoitukset palautetaan jar-apuohjelmalla luotuina paketteina. Seuraava Unix-komento luo jar-tiedoston harj4.jar Java-tiedostoista Luokka1.java ja Luokka2.java.
jar cf harj4.jar Luokka1.java Luokka2.java
Jar-tiedoston sisällön voi katsoa komennolla:
jar tf harj4.jar
VAROITUS. Muista ehdottomasti, että ensimmäinen tiedostonimi on se tiedosto, johon haluat paketin laatia, koska muuten jar-komento kirjoittaa paketin ensimmäisen antamasti tiedoston päälle. Siten komento
jar cf Luokka1.java Luokka2.java
TUHOAA tiedoston Luokka1.java.
Valmis jar-paketti, joka sisältää KAIKKI harjoituksessa käytettävät luokat (myös valmiit luokat) lähetetään sähköpostitse liitetiedostona oman ryhmän tutorille. Kaikkien eri osatehtävien luokat palautetaan samassa paketissa, eli lähetä vain yksi viesti.
Palautus on tehtävä viimeistään torstaina 22.11 klo 16.00. Huom. päivää pitempi palautusaika. Jos palautus myöhästyy, jokaisen myöhässä palautetun tehtävän arvosana laskee 5 pistettä / myöhästymispäivä.