next up previous contents index
Next: Lisää muuttujien tyyppejä Up: Perusteet Previous: Ohjelman kääntäminen ja ajaminen   Sisältö   Hakemisto

Muuttujat ja sijoituskäsky

Edellisessä kappaleessa esitetty esimerkkiohjelma tulosti jonkun ennalta määrätyn tekstin. Yleensä haluamme kuitenkin ohjelman tekevän jotain monimutkaisempaa, esimerkiksi laskevan arvoja käyttäjän antamista tiedoista tai muuten käsittelevän käyttäjän antamia tietoja.

Tällöin meillä täytyy olla joku tapa säilyttää ja käsitellä käyttäjän antamia arvoja ja laskettuja välituloksia. Tarkastellaan esimerkkinä ohjelmaa, joka muuttaa käyttäjän Fahrenheit-asteissa antaman lämpötilan Celcisus-asteiksi. Celsius-asteet saadaan vähentämällä Fahrenheit-asteista 32 ja kertomalla erotus 5/9:llä. Jotta ohjelma voisi tehdä laskutoimituksen, sillä on oltava joku keino, jolla se voi tallentaa käyttäjän antaman Fahrenheit-arvon ja käyttää tätä arvoa laskutoimituksessa. On myös kätevää, jos ohjelma voi johonkin tallentaa lasketun Celsius-arvon ennen sen tulostamista.

Arvojen tallentamiseen käytetään muuttujia. Jokaisella muuttujalla on nimi ja muuttujalle voi antaa arvon. Muuttujan nimen avulla pääsee käsiksi tämän muuttujan arvoon myöhemmin ohjelmassa. Esimerkiksi seuraavassa fahrenheit-celsius-muunnoksen tekevässä ohjelmassa käytetään muuttujia fahrenheit ja celsius fahrenheit- ja celsius-asteiden tallentamiseen. Koska emme ole vielä käsitelleet sitä, miten Java-ohjelma voi lukea syötettä käyttäjältä (eikä tämä ole Java-kielellä ihan yksinkertaista), esitämme ensin yksinkertaistetun ohjelman, jossa fahrenheit-asteiden arvo annetaan suoraan ohjelmassa eikä sitä pyydetä käyttäjältä.

public class Fahrenheit1 {

  public static void main(String[] args) {
    int fahrenheit;
    int celsius;

    fahrenheit = 70;
    celsius = 5 * (fahrenheit - 32) / 9;
    System.out.println(fahrenheit);
    System.out.println("Fahrenheittia on");
    System.out.println(celsius);
    System.out.println("Celsiusta");
  }
}

Pääohjelman rivillä

int fahrenheit;
määritellään, että ohjelma käyttää muuttujaa, jonka nimi on fahrenheit. Sana int kertoo, että muuttuja voi saada arvokseen kokonaislukuja. Java-ohjelmissa jokainen muuttuja on määriteltävä ennen kuin sitä käytetään ohjelmassa. Määrittelyn yhteydessä on aina kerrottava muuttujan tyyppi eli se, minkä tyyppisiä arvoja tämä muuttuja voi saada. Muuttujan tyyppiä tarvitaan siihen, että Java-kääntäjä osaa varata ohjelman käyttämästä muistitilasta oikeankokoisen muistialueen tämän muuttujan arvon säilyttämiseen.

Ohjelman seuraavalla rivillä on määritelty muuttuja celsius. Kaksi samantyyppistä muuttujaa voitaisiin määritellä myös samalla rivillä:

int fahrenheit, celsius;

Käsky

fahrenheit = 70;
on sijoituskäsky. Siinä on =-merkin vasemmalla puolella muuttujan nimi ja oikealla puolella joku lauseke, jonka arvo voidaan laskea. Sijoituskäskyä suoritettaessa lasketaan aina oikealla puolella olevan lausekkeen arvo ja annetaan se arvoksi vasemmalla puolella olevalle muuttujalle. Jos muuttujalla on aikaisemmin ollut joku toinen arvo, vanha arvo häviää sijoituskäskyä suoritettaessa. Yllä olevassa sijoituskäskyssä oikean puolen arvon laskeminen on yksinkertaista, koska se on suoraan lausekkeessa oleva arvo, 70.

Sen sijaan seuraavassa sijoituskäskyssä

celsius = 5 * (fahrenheit - 32) / 9;
pitää oikean puolen lausekkeen arvo todella laskea. Lausekkeessa esiintyy yksi muuttujan nimi, fahrenheit. Tällöin lausekkeen arvoa laskettaessa otetaan muuttujan fahrenheit arvo käskyn suoritushetkellä ja käytetään sitä. Kun lausekkeen arvo on laskettu, saatu arvo sijoitetaan muuttujan celsius arvoksi.

Tämän jälkeen ohjelmassa seuraa joukko tulostuskäskyjä. Ensimmäisessä käskyssä tulostetaan muuttujan fahrenheit arvo. Huomaa, että käskyssä nimi fahrenheit ei ole nyt lainausmerkkien sisällä. Tämä on sen vuoksi, että emme halua ohjelman tulostavan tekstiä fahrenheit, vaan sen kokonaislukuarvon, joka muuttujalla on. Seuraavan tulostuskäskyn halutaan taas tulostavan sulkujen sisällä olevan tekstin sellaisenaan. Tämän vuoksi teksti on lainausmerkkien sisällä.

Kaiken kaikkiaan ohjelman tulostus näyttää seuraavalta:

70
Fahrenheittia on
21
Celsiusta

Ohjelman tulostama teksti jakaantuu neljälle eri riville, koska jokainen ohjelman tulostuskäsky tulostaa rivinvaihdon. Koko teksti voidaan myös tulostaa yhdellä tulostuskäskyllä, jolloin koko teksti tulee samalle riville. Tulostuskäskylle voi kuitenkin antaa tulostettavaksi vain yhden merkkijonon. Tämän vuoksi tulostettavat muuttujien arvot ja merkkijonot on yhdistettävä ensin yhdeksi merkkijonoksi. Tämä voidaan tehdä +-operaattorilla. Jos ohjelmaan kirjoitetaan käsky

System.out.println(fahrenheit + " F on " + celsius + " Celsiusta");
niin ohjelmaa suoritettaessa otetaan ensin muuttujan fahrenheit arvo, liitetään sen perään lainausmerkeissä oleva teksti, tämän perään muuttujan celsius arvo ja loppuun toisissa lainausmerkeissä oleva teksti. Näin saadaan yksi merkkijono, joka tulostetaan kuvaruudulle.

Muutettu ohjelma on kokonaisuudessa alla

public class Fahrenheit2 {

  public static void main(String[] args) {
    int fahrenheit, celsius;

    fahrenheit = 70;
    celsius = 5 * (fahrenheit - 32) / 9;
    System.out.println(fahrenheit + " F on " + celsius + " Celsiusta");
  }
}

ja ohjelma tulostaa

70 F on 21 Celsiusta

Jos haluamme ohjelman muuttavan jonkun toisen Fahrenheit-arvon Celsius-asteiksi, meidän pitää käydä muuttamassa ohjelmassa olevaa ensimmäistä sijoituskäskyä ja tämän jälkeen kääntää ohjelma uudelleen. Kappaleessa 1.5 kerrotaan, miten ohjelma voi pyytää arvon suoraan käyttäjältä.



Aliluvut
next up previous contents index
Next: Lisää muuttujien tyyppejä Up: Perusteet Previous: Ohjelman kääntäminen ja ajaminen   Sisältö   Hakemisto
Kerttu Pollari-Malmi 2003-01-27