TEHTÄVÄ 3:n ARVOSTELU, Lassi Ågren Tehtävän ratkaisuksi tuli laatia ohjelma, joka tarkistaa että komentoriviparametreinä on kaksi merkkijonoa ja käyttää näitä luodessaan ilmentymiä Syottotiedosto- ja Tulostiedosto-luokista. Ohjelmassa on oltava silmukka, joka käy läpi syöttötiedostoa niin kauan, kunnes saadaan null-arvo ilmaisemaan tiedoston päättymistä. Silmukassa tarkistetaan onko tiedostosta luettu rivi tyhjä, eli nollan pituinen tai pelkkiä välilyöntejä sisältävä, ja jos ei ole, kirjoitetaan rivi syöttötiedostoon. Esimerkkiratkaisu: ---------------------------------------------------------------------------- public class PoistaTyhjatRivit { public static void main (String [] komentoriviparametrit) { // Alussa tarkistetaan komentoriviparametrien oikeellisuus: if (komentoriviparametrit.length != 2) { System.out.println("Käynnistyskomennon perään tulee kirjoittaa " + "luettavan tiedoston nimi ja sen tiedoston nimi" + "johon kirjoitetaan."); return; } // Luodaan ilmentymät käytettävistä tiedostonhallintaluokista: Syottotiedosto luettava = new Syottotiedosto(komentoriviparametrit[0]); Tulostiedosto kirjoitettava = new Tulostiedosto(komentoriviparametrit[1]); String luettuRivi = ""; // Suoritetaan silmukkaa, jossa luetaan syöttötiedostoa riveittäin: while ((luettuRivi = luettava.lueRivi()) != null) { // Oletetaan, että luettu rivi sisältää jotain: boolean onkoTyhjä = false; // Tarkistetaan onko rivi nollan pituinen: if (luettuRivi.length() == 0) onkoTyhjä = true; // Tarkistetaan onko rivissä pelkkiä välilyöntejä: int välilyöntienMäärä = 0; for (int i = 0; i < luettuRivi.length(); i++) { if (luettuRivi.charAt(i) == ' ') ++välilyöntienMäärä; } if (välilyöntienMäärä == luettuRivi.length()) onkoTyhjä = true; /* Tarkkaan ottaen ylläoleva osa-algoritmi välilyöntien tutkimiseen tutkii myös onko rivin pituus nolla. Tällöin nimittäin for-lohkoa ei suoriteta ja viimeiseksi tutkittava ehto on tosi. */ // Jos rivillä on aito merkkijono, kirjoitetaan se tiedostoon: if (!onkoTyhjä) kirjoitettava.kirjoitaRivi(luettuRivi); } // while System.out.println("Tiedostosta " + komentoriviparametrit[0] + " on tehty kopio tiedostoon " + komentoriviparametrit[1] + " ilman tyhjiä rivejä."); } // main() } // class --------------------------------------------------------------------------- Tehtävän pisteytys jakautuu seuraavasti: komentoriviparametrit 3p -oikeellinen lkm 2 -käyttö 1 syöttötiedoston lukeminen 5p -olion luonti 2 -silmukka 2 -rivin lukeminen 1 rivien valikoiminen 5p -nollapituiset 2 -välilyöntirivit 3 tulostiedostoon kirjoittaminen 3p -olion luonti 2 -rivin kirjoittaminen 1 Pistemäärästä vähennetään lisäksi raskauttavien virheiden mukaisesti. Esimerkiksi luokan metodien sisäkkäinen esittely on raskauttava virhe.