Tässä luvussa opetellaan ysinkertaiset välineet syöttöön ja tulostukseen: kirjoitetaan kuvaruudulle ja luetaan näppäimistöltä. Koska Java-kielessä ei ole valmiina yksinkertaista lukemisen välinettä, kurssia varten on laadittu luokka Lue, jonka avulla päästään harjoittelemaan algoritmien laatimista ilman "oikeiden" syöttövälineiden monimutkaisia yksityiskohtia.
System.out.println("Hoi maailma!"); System.out.println( a/b ); System.out.println(tulos);Pitkähän tuo tulostusoperaatio on kirjoittaa, mutta onneksi sen käyttö on helppoa. Tulostettavana on aina korkeintaan yksi arvo. Jos haluaa tulostaa vaikkapa tekstejä ja lukuarvoja, niistä on tehtävä yksi merkkijono. Esimerkiksi lauseet:
int kpl = 123; System.out.println("Lukumäärä on nyt" + kpl + "kappaletta."); System.out.println("Lukumäärä on nyt " + kpl + " kappaletta.");tulostavat:
Lukumäärä on nyt123kappaletta. Lukumäärä on nyt 123 kappaletta.Operaatio print tulostaa ilman rivinvaihtoa. Edellisen esimerkin jälkimmäinen tulostus saadaan aikaan siis vaikkapa lausein:
System.out.print("Lukumäärä on nyt "); System.out.print(kpl); System.out.println(" kappaletta.");tai:
System.out.print("Lukumäärä on nyt "); System.out.print(kpl); System.out.print(" kappaletta."); System.out.println();
Koska merkkijono alkaa ja loppuu lainausmerkkiin, tulostettava lainausmerkki ilmaistaan merkkiyhdistelmänä \". Myös eräille muille erikoistulostuksille on oma ilmauksensa, uusi rivi on \n, tabulaattori on \t ja takakeno on \\. Esimerkiksi lauseet:
System.out.println("Hän sanoi \"kiitos\"!"); System.out.println("Tyhjiä rivejä:\n\n\n"); System.out.println("\tTabuloitu kerran"); System.out.println("\t\tTabuloitu kahdesti"); System.out.println("Takakeno: \\"); System.out.println("Pari takakenoa: \\\\");tulostavat:
Hän sanoi "kiitos"! Tyhjiä rivejä: Tabuloitu kerran Tabuloitu kahdesti Takakeno: \ Pari takakenoa: \\Huom:Merkkijonoja ja lukuarvoja tulostettaessa on muistettava, että "+" voi tarkoittaa yhteenlaskua tai katenointia, järjestys ratkaisee. Lauseet:
System.out.println("luku on "+2+3); System.out.println(2+3+" on luku"); System.out.println(77+88); System.out.println(""+77+88);tulostavat
luku on 23 5 on luku 165 7788
Yksi tapa saada tämä luokka käyttöön on kopioida tiedosto Lue.java siihen hakemistoon, jossa ohjelmiaan laatii. Ennen luokan käyttöä se on tietenkin käännettävä class-tiedostoksi (kts. luku 2.1). Joustavampia tapoja opitaan myöhemmin!
Huom: Luokka Lue on tarkoitettu käytettäväksi Javan version 1.1.3 yhteydessä. Jos teet ohjelmiasi versiolla 1.0.2, käytä Lue-luokan sijaan luokkaa Lue102 (Lue102.java). Lue102 kääntyy ja toimii myös Java-versiossa 1.1.3 vaikka kääntäjä vähän varoitteleekin.
Lukuapuvälineiden toteutusta ei tietenkään vielä tarvitse ymmärtää, mutta kyllä niitä jo katsella saa. Kukapa ei olisi utelias...
Luokassa Lue on kolme lukemisen välinettä:
Kaikki kolme ns. palauttavat arvonaan luetun. Niitä siis käytetään lausekkeina eli niillä itsellään on arvo:
int luku1; double luku2; String mjono; luku1 = Lue.kluku(); luku2 = Lue.dluku(); mjono = Lue.rivi();Huom: Nuo tyhjät sulkeet operaatioiden yhteydessä ovat välttämättömät. Operaatiot on toteutettu luokan Lue ns. metodeina. Metodeista pian lisää.
Huom: Jos käytät Lue102-luokkaa, operaatiot kirjoitetaan muodossa Lue102.rivi(), jne.
Huom: Javassa on myös tulostusoperaatio
System.out.flush();jolla ns. tulostuspuskuri saadaan kirjoitettua tulostuslaitteelle. Jos käytät Lue102-luokkaa System.out.print(...) -operaation jälkeen, lisää heti print-operaation jälkeen tuo 'flush', jotta saat tekstin näkyviin.
public class Viisas { /* Viisas ohjelma, AW-97*/ public static void main(String[] args) { String syottoRivi; int kokonaisLuku; double liukuLuku; System.out.println("Mikä on nimesi?"); syottoRivi = Lue.rivi(); System.out.println("Mitä kokonaislukua ajattelet?"); kokonaisLuku = Lue.kluku(); System.out.println("Mitä reaalilukua ajattelet?"); liukuLuku = Lue.dluku(); System.out.print ("Tiedän, että nimesi on "+syottoRivi); System.out.println(" ja että ajattelit lukuja "+ kokonaisLuku+" ja "+liukuLuku+"."); System.out.println("Enkö olekin viisas!"); } }Ohjelman suoritus voi näyttää vaikkapa seuraavalta:
Mikä on nimesi? Arto Mitä kokonaislukua ajattelet? 49 Mitä reaalilukua ajattelet? 3.14 Tiedän, että nimesi on Arto ja että ajattelit lukuja 49 ja 3.14. Enkö olekin viisas!
Laaditaan vähän järkevämpi sovellus kolmen luvun keskiarvon laskemiseen. Ohjelma on vuorovaikutteinen (interactive) eli se keskustelee käyttäjän kanssa (Kolmekarvo.java):
public class KolmeKarvo { /* Sovellus 3 luvun keskiarvon laskentaan, AW-97*/ public static void main(String[] args) { double luku1, luku2, luku3; double summa, karvo; System.out.println("\n **** Keskiarvo-ohjelma ****\n"); System.out.print("Anna 1. luku: "); luku1 = Lue.dluku(); System.out.print("Anna 2. luku: "); luku2 = Lue.dluku(); System.out.print("Anna 3. luku: "); luku3 = Lue.dluku(); summa = luku1 + luku2 + luku3; karvo = summa/3; System.out.println("Lukujen keskiarvo on " + karvo); } }Tämän ohjelman suoritus voi näyttää seuraavanlaiselta:
**** Keskiarvo-ohjelma **** Anna 1. luku: 150.9 Anna 2. luku: -34.12 Anna 3. luku: 78.9 Lukujen keskiarvo on 65.22666666666667