581326-3 Java-ohjelmointi, koe 25.6.2001/AW (Avoin yliopisto)

Kirjoita jokaisen vastauspaperisi alkuun kurssin nimi ja kokeen päivämäärä sekä nimesi, henkilötunnuksesi ja allekirjoituksesi. Jokainen vastaus omalle arkilleen!
  1. Basilisko on yksinkertainen, mutta silti hyvin yksilöllinen olento. Jokaisella basiliskolla on yksikäsitteinen, syntymässä saatu järjestysnumero, ns. yksilöllisyys, joka ei koskaan voi muuttua, eikä kukaan muu koskaan voi saada samaa yksilöllisyyttä.

    Basiliskon perimä on String-olio. Basiliskot lisääntyvät vain pariutumalla. Lapsi saa jomman kumman vanhempansa perimän sellaisenaan. Todennäköisyys molemmille on yhtä suuri. Perimän arvonnan voi suorittaa lauseella if (Math.random()<0.5) ...

    Mallinna basilisko luokkana Basilisko, jossa kaikki kentät ovat luonnollisesti private, ja jossa on julkiset välineet (konstruktori ja aksessorit):

    TuplaBasilisko on basiliskon sukulainen. Se eroaa basiliskosta vain pariudu-metodin osalta: TuplaBasiliskon lapsi saa perimäkseen vanhempiensa perimämerkkijonojen katenaation, so. perimää esittävät merkkijonot liitetään yhteen. Toteuta TuplaBasilisko luokan Basilisko aliluokkana. Ohjelmoi uudelleen vain tarvittavat osat - esimerkiksi uusia kenttiä ei tarvita.

    Esimerkki: (juuri näin pitää tulostaa: olion järjestysnumerokin kuuluu siis tulostusasuun, kolmas tulostus voi tietenkin olla joko "(3): Maija" tai "(3): Matti")

        Basilisko isä   = new Basilisko("Matti");
        Basilisko äiti  = new Basilisko("Maija");
        Basilisko lapsi = isä.pariudu(äiti);
    
        System.out.println(isä);    // tulostus: (1): Matti
        System.out.println(äiti);   // tulostus: (2): Maija
        System.out.println(lapsi);  // tulostus: (3): Maija
    
        TuplaBasilisko äijä  = new TuplaBasilisko("Kalle");
        TuplaBasilisko ämmä  = new TuplaBasilisko("Kaija");
        TuplaBasilisko pentu1 = äijä.pariudu(ämmä);
        TuplaBasilisko pentu2 = ämmä.pariudu(äijä);
    
        System.out.println(äijä);   // tulostus: (4): Kalle
        System.out.println(ämmä);   // tulostus: (5): Kaija
        System.out.println(pentu1); // tulostus: (6): KalleKaija
        System.out.println(pentu2); // tulostus: (7): KaijaKalle
    
        TuplaBasilisko miniäTaiVävy = new TuplaBasilisko("Abcde");
        TuplaBasilisko uusi = pentu1.pariudu(miniäTaiVävy);
    
        System.out.println(uusi);   // tulostus: (9): KalleKaijaAbcde
    
                                                                (16 pistettä)
    

  2. Ohjelmointitaitoinen ystäväsi ei ole ymmärtänyt Javan kaikkia hienouksia. Vastaa hänen seuraaviin kysymyksiinsä. (Vastauksen arvioinnissa otetaan huomioon selostuksen ajateltu lukija. Älä siis kirjoita tarkastajalle, joka jo osaa asian, kirjoita tuolle ystävälle!)
                                                                (20 pistettä)
    

  3. Käytössäsi on tekstitiedostojen lukemiseen luokka Syottotiedosto. Luokalla on konstruktori Syottotiedosto(String nimi). Parametrina annetaan tiedoston nimi. Rivejä luetaan luokan ilmentymämetodilla
      public String lueRivi()
    
    Tiedoston loppuminen ilmaistaan null-arvolla.

    Käytössäsi on myös tekstitiedostojen kirjoittamisen väline, luokka Tulostiedosto. Luokalla on konstruktori Tulostiedosto(String nimi). Parametrina annetaan tiedoston nimi. Rivejä kirjoitetaan ilmentymämetodilla

      public void kirjoitaRivi(String rivi)
    

    Poikkeuksiin on varauduttu näissä luokissa: Virheen sattuessa saadaan ilmoitus ja ohjelman suoritus keskeytyy.

    Laadi ohjelma PoistaTyhjätRivit. Ohjelmalle annetaan komentoriviparametreina kaksi tiedoston nimeä. Ohjelma tekee ensimmäisestä tiedostosta sellaisen kopion, josta on poistettu kaikki tyhjät rivit. Tyhjiksi riveiksi tulkitaan nollan merkin mittaiset rivit ja pelkkiä välilyöntejä sisältävät rivit. Toinen komentoriviparametri on luotavan kopiotiedoston nimi.

    Ohjelman ei siis tarvitse itse käsitellä poikkeuksia, tiedostonkäsittelyluokat pitävät niistä huolen.

                                                                (16 pistettä)
    

Onnea kokeeseen ja hauskaa kesää!