Tässä luvussa kirjoitellaan lausekkeita - arvon ilmauksia - ja sijoitellaan niitä muuttujien arvoiksi. Käytössä on eräitä Javan välineitä. Luvussa 3 opitaan lisää.
/* Sovellus maailman tervehtimiseen tekijä: Arto Wikla */ public class Hoi{ public static void main(String[] args){ // pääohjelma System.out.println("Hoi maailma!"); } }Ilmaus "/*" aloittaa kommentin, jonka "*/" lopettaa. Ilmaus "//" sanoo, että loppurivi on kommenttia.
Näillä kommenteilla on merkitystä vain ihmiselle, joka lukee ohjelmatekstiä. Kääntäjä ei niistä välitä. Javassa on myös automaattista dokumentointia helpottavia kommentteja. Niistä myöhemmin.
int lkm, kpl; double pituus, leveys, korkeus; boolean oikein; String nimi;Muuttujat lkm ja kpl ovat kokonaislukutyyppisiä, so. niiden arvoksi voi asettaa vain kokonaislukuja. Muuttujat pituus, leveys, korkeus ovat desimaalilukuja (ns. "kaksoistarkkuuden liukulukuja") ja muuttuja oikein on totuusarvoinen (true, false). Muuttuja nimi on merkkijonoarvoinen.
lkm = 567; kpl = -9876; pituus = 123.456; korkeus = -0.001; oikein = false; nimi = "Matti Mainio";Sijoitusoperaatio on syytä lukea "saa arvon", EI "on".
Muuttujille voidaan antaa alkuarvo jo määrittelyn yhteydessä:
int lkm=1, kpl=100; double pituus=1.1, leveys=2.2, korkeus=3.3; boolean oikein=true; String nimi="Jussi Juonio";Algoritmeissa muuttujan uusi arvo usein lasketaan sen vanhasta arvosta, esimerkiksi:
lkm = lkm + 10; pituus = pituus - 3; korkeus = korkeus * 2; leveys = leveys / 2;Näissä tapauksissa voi käyttää (mutta ei tarvitse!) erityisiä sijoitusoperaatioita "+=", "-=", "*=" ja "/=" :
lkm += 10; pituus -= 3; korkeus *= 2; leveys /= 2;Hyvin yleistä on, että muuttujan arvoa kasvatetaan tai vähennetään yhdellä:
kpl = kpl + 1; leveys = leveys - 1;Nämä voidaan kirjoittaa hyvin lyhyesti:
++kpl; --leveys;tai
kpl++; leveys--;
+ - * / %Jos molemmat operandit (so. laskettavat) ovat kokonaislukutyyppisiä, myös laskutoimituksen tulos on on kokonaisluku. Muuten tulos on liukuluku.
Operaatio "/" tarkoittaa kokonaisjakoa, jos sekä osoittaja, että nimittäjä ovat kokonaislukutyyppiä. Aina muulloin kyseessä on liukulukujakolasku.
Operaatio "%" on kokonaislukujen jäännösjako. Tuloksen etumerkki on sama kuin osoittajan etumerkki, nimittäjän etumerkillä ei ole vaikutusta tuloksen etumerkkiin.
Esimerkkejä:
public class Esim { public static void main(String[] args) { int lkm=1, kpl=100; double pituus=1.1, leveys=2.2, korkeus=3.3; lkm = kpl- 10 * (kpl-8); pituus = leveys * korkeus + pituus * lkm; lkm = 5; korkeus = 5; kpl = lkm/2; // arvo on 2 leveys = korkeus/2; // arvo on 2.5 lkm = 17%3; // arvo on 2 } }
Huom: Jos kahden kokonaislukuarvon jakamisen tuloksena halutaan liukuluku, on se erikseen ilmaistava. Yksi tapa on kertoa jompi kumpi kokonaisluku liukuluvulla 1.0 ennen jakolaskua (muita tapoja opitaan myöhemmin) Esimerkiksi ohjelma:
public class Koe { public static void main(String[] args) { int a=5, b=2; System.out.println( a/b ); System.out.println( a/b * 1.0 ); System.out.println( 1.0 * a/b ); System.out.println( a/(b * 1.0) ); } }tulostaa
2 2.0 2.5 2.5
Operaatio "+" sovellettuna merkkijonoihin tarkoittaa katenointia:
public class Mesim { public static void main(String[] args) { String alku = "kissa", loppu = "vie"; String koko; koko = alku + loppu; // "kissavie" koko = alku + " " + loppu; // "kissa vie" koko = alku + " " + loppu +"!"; // "kissa vie!" } }
Jos toinen "yhteenlaskettavista" on numeerinen arvo ja ja toinen on merkkijono, yhteenlasku tarkoittaa tällöinkin katenointia (Huom: "yhteenlaskut" lasketaan vasemmalta oikealle):
public class KateKoe { public static void main(String[] args){ String jono = "kissa", tulos; tulos = jono + 100; System.out.println(tulos); tulos = jono + 100 + 1000; // System.out.println(tulos); tulos = 100 + jono; System.out.println(tulos); tulos = 100 + 1000 + jono; // System.out.println(tulos); } }Ohjelma tulostaa:
kissa100 kissa1001000 100kissa 1100kissa
Huom: Kun sijoitetaan:
String a = "qwerty"; String b = a;merkkijonoa "qwerty" ei kopioida b:n arvoksi. Muuttujat a ja b vain osoittavat samaan merkkijonoon. Selitys on, että String-arvot ovat olioita, kun vaikkapa kokonaisluvut ovat ns. alkeistyyppiä. Sellaiset arvot sijoitusoperaatiossa kopioidaan. Tähän palataan!