Helsingin yliopisto / Tietojenkäsittelytieteen laitos / 581325-0 Ohjelmoinnin perusteet
Copyright © 2006 Arto Wikla. Tämän oppimateriaalin käyttö on sallittu vain yksityishenkilöille opiskelutarkoituksissa. Materiaalin käyttö muihin tarkoituksiin, kuten kaupallisilla tai muilla kursseilla, on kielletty.

3. harjoitukset 18.-22.9.2006

Aiheita: algoritmeja Javalla; kirjoittamista, lukemista, loogisia lausekkeita, toistolauseita, ensimmäiset metodit

  1. Tee vuorovaikutteinen ohjelma Joulukuusi, joka pyytää kuusen korkeuden ja tulostaa "*"-merkeistä muodostuvan "kuusen" tasakylkisenä kolmiona. Jos korkeus on esimerkiksi 5, ohjelma tulostaa:
        *
       ***
      *****
     *******
    *********
    
    Saat olettaa, että käyttäjä todellakin syöttää tiedon oikean tyyppisenä, kuten kaikissa kurssin tehtävissä, ellei muuta pyydetä. Mutta varaudu siihen että luku on arvoltaan sopimaton: Negatiivinen luku ei kelpaa korkeudeksi. Virhetilanteessa ohjelman pitää antaa virheilmoitus ja pyytää uutta lukua kunnes saa kelvollisen.

  2. Vuosi on karkausvuosi, jos se on jaollinen 4:llä, mutta ei sadalla. 400:lla jaolliset kuitenkin ovat karkausvuosia, mutta vuosi 4000 ei kuitenkaan ole karkausvuosi. Laadi vuorovaikutteinen sovellus, joka tulostaa karkausvuodet käyttäjän pyytämältä vuosilukuväliltä. Alku- ja loppuvuoden saa syöttää kummassa tahansa järjestyksessä. Voit itse päättää, onko käyttäjän antamalla järjestyksellä jokin vaikutus ohjelman käyttäytymiseen.

  3. Toteuta seuraava tietokonepeli: Ensin ohjelma arpoo jonkin kokonaisluvun 0, 1, 2, ..., 9. Sitten käyttäjä syöttää ohjelmalle kolme arvausta siitä, minkä luvun ohjelma on arponut.

    Tämän jälkeen ohjelma selvittää ja ilmoittaa pelin tuloksen:

    Mikään ei estä kayttäjää syöttämästä eli arvaamasta samaa lukua useampaankin kertaan; tällöin sekä riski hävitä että mahdollinen voitto kasvavat.

    Tehtävän ratkaisuksi riittää toteuttaa yhden luvun arvaaminen, ts. yksi pelikerta.

    Satunnaisluvun väliltä 0-9 saa arvottua seuraavasti:

       int koneenLuku = (int)(10*Math.random());
    
    (Ei tuota lauseketta vielä tarvitse ymmärtää, kunhan vaan käyttää...)

    Toteuta tämä "käyttäjän kannalta kriittinen uhkapeliohjelma" siten, että virheellisiin syöttötietoihin varaudutaan. Syöttötiedot voivat tässä tapauksessa olla virheellisiä kahdella periaatteessa erilaisella tavalla:

    1. Tiedot eivät ole kokonaislukuja, ehkä eivät numeerisia lainkaan.
    2. Tiedot ovat kokonaislukuja, mutta väärän kokoisia.

    Ohjelman pitää virhetilanteessa antaa virheilmoitus ja pyytää uusia lukuja kunnes saa kelvolliset.

  4. Ohjelmoi seuraavat metodit. (Tällaisia metodeja kutsutaan luokkametodeiksi eli "staattisiksi metodeiksi". Tällaista luokkametodien käyttötapaa voitaisiin kutsua "pikku apulaisten" laatimiseksi pääohjelmalle. Tapa on hyvin perinteinen, mutta silti vielä paljon käytetty. Muita metodien käyttötapoja opitaan pian.)

    1. private static void kirjoitaLuettuRiviTuplana()
      lukee yhden syöttörivin ja tulostaa tuon rivin kahteen kertaan yhdelle tulostusriville
    2. private static String luettuTuplanaa()
      lukee yhden syöttörivin ja palauttaa arvonaan tuon rivin katenoituna (eli yhteenliitettynä) itsensä kanssa
    3. private static void kirjoitaLukuKerrottuna(int luku, int kertoja)
      tulostaa parametrina annetun kokonaisluvun kerrottuna parametrina annetulla kertojalla
    4. private static int kerro(int luku, int kertoja)
      palauttaa arvonaan parametrina annetun kokonaisluvun kerrottuna parametrina annetulla kertojalla

    5. private static double minimi(double eka, double toka)
      palauttaa arvonaan pienemmän double-parametreista; jos parametrit ovat yhtä suuret palautetaan kumpi vain
    6. private static boolean suurempi(int eka, int toka)
      palauttaa arvonaan true, jos kahdesta parametrista ensimmäinen on suurempi kuin toinen, muuten metodi palauttaa arvon false.

    Sijoita metodit johonkin luokkaan ja ohjelmoi myös pääohjelma, joka havainnollistaa metodien käyttöä.

  5. Laadi metodi laskeSyottoKarvo, jolle annetaan luettavien lukujen lukumäärä parametrina. Metodi laskee ja tulostaa syöttölukujen keskiarvon. Laadi myös pääohjelma, joka tarjoaa keskiarvojen laskentapalvelun. Yhdellä käyttökerralla pitää voida laskea useampia keskiarvoja. Tässä tehtävässä saat olettaa, että syötteet annetaan virheettöminä.

Takaisin harjoitussivulle.