Sisällysluettelo
Javan tietotyypit
Jokaisella muuttujalla on oma tietotyyppinsä. Erityyppisiä muuttujia ei voi (yleensä) yhdistää samaan laskuun.
Muuttujien tyypit ja arvoalueet
| tyyppi | arvolaji | oletusarvo | tilantarve | arvoalue |
|---|---|---|---|---|
| boolean | true tai false | false | yksi bitti | true, false |
| char | Unicode-merkki | \u0000 | 16 bittiä | \u0000…\uFFFF |
| byte | etumerkillinen kokonaisluku | 0 | 8 bittiä | -128…127 |
| short | etumerkillinen kokonaisluku | 0 | 16 bittiä | -32768…32767 |
| int | etumerkillinen kokonaisluku | 0 | 32 bittiä | -2147483648…2147483647 |
| long | etumerkillinen kokonaisluku | 0 | 64 bittiä | -9223372036854775808 … 9223372036854775807 |
| float | IEEE-754 -muotoinen desimaaliluku | 0.0 | 32 bittiä | +/- 1,4E-45…+/- 3,4E38 |
| double | IEEE-754 -muotoinen desimaaliluku | 0.0 | 64 bittiä | +/-4,9E-324…+/-1,8E308 |
Lisäksi käytössä tyyppi String. Yleensä desimaaliluvuista käytetään tyyppiä double ja kokonaisluvuista tyyppiä int.
Java-kielen varatut sanat
abstract, boolean, break, byte, byvalue, case, catch, char, class, const, default, do, double, else, extends, false, final, finally, float, for, goto, if, implements, import, instanceof, int, interface, long, native, new, null, package, private, protected, public, return, short, static, super, switch, synchoronized, this, threadsafe, throw, transient, true, try, void, while ja continue.
Muuttujien esittely
Javassa muuttujat esitellään (yleensä) public static void main(String[ ] args) -litanian jälkeen. Muuttujat esitellään kertomalla ensin muuttujan tyyppi ja sen jälkeen muuttujan nimi. Muuttujalle olisi hyvä antaa alkuarvo heti esittelyn yhteydessä. Hyvä ohjelmoija esittelee kaikki ohjelmassa käytettävät muuttujat ohjelman alussa (poikkeuksen muodostavat for-silmukat, joihin palataan myöhemmin).
Muuttujan nimi voi olla mikä muu tahansa kuin varattu sana, mutta se ei voi alkaa numerolla. Nimessä voi olla alaviiva _ ja nimen keskellä ja lopussa voi olla numero. Myös ääkkösiä voi käyttää. Muuttujan nimeksi kannattaa antaa jokin kuvaava nimi. Hyvän ohjelmointitavan mukaisesti muuttujan nimet alkavat pienellä kirjaimella. Kuten englannissa, javassa desimaalierotin on piste.
Esimerkki muuttujien esittelystä:
class Muuttuja { public static void main(String[ ] args) { int luku = 0; double toinen_luku; char merkki = 'M', toinen_merkki = 'K'; byte pieni_luku; } }
Tietotyyppi kertoo, millaista tietoa muuttuja voi sisältää. luku-muuttuja voi sisältää kokonaislukuja, joten sille ei voi antaa arvoksi vaikkapa sanaa ”paloauto”. Muuttuja toinen_luku voi saada arvokseen desimaalilukuja (desimaaliluvun tunnistaa desimaalipisteestä). char tyyppiset muuttujat voivat saada arvokseen yhden merkin.
Laskutoimitukset
Laskutoimitukset ovat kuten taulukkolaskennassakin, eli
| Laskutoimitus | Operaattori |
|---|---|
| Yhteenlasku | + |
| Vähennyslasku | - |
| Kertolasku | * |
| Jakolasku | / |
Laskutoimituksissa on oltava tarkkana, että muuttujien arvoalueet riittävät. Lisäksi on pidettävä huoli, että laskutoimitus pysyy oikeassa tietotyypissä. Esimerkiksi jaettaessa kokonaislukuja tulos ei välttämättä ole kokonaisluku.
Ohjelmoinnissa = ei tarkoita samaa kuin matematiikassa, vaan ohjelmoinnissa = merkki tarkoittaa sijoitusta. Muuttujan arvoksi tulee sama, kuin mitä = merkin oikealla puolella on.
Esimerkkejä Talletetaan kertolaskun 5*10 tulos muuttujaan tulos:
tulos = 5 * 10;
Talletetaan jakolaskun 10/2 tulos muuttujaan osamaara:
osamaara = 10 / 2;
Annetaan muuttujan isompi arvoksi pienempi+5:
isompi = pienempi + 5;
Annetaan muuttujan isompi uudeksi arvoksi isompi+5 (eli kasvatetaan muuttujan arvoa viidellä):
isompi = isompi + 5;
tai
isompi += 5;
Täten vaikkapa
luku *= 10 + 5;
tarkoittaa
luku = luku*10 + 5;
Tulostetaan muuttujan isompi arvo:
System.out.print(isompi);
Muuttujan arvon kasvattaminen yhdellä:
arvo = arvo + 1;
tai
arvo++;
tai
arvo+=1;
Yhdellä pienentäminen käy vastaavasti.
Kokonaisluvut
Javan kokonaislukumuuttujien tyypit ovat byte, short tai int.
Kokonaislukujen summa, erotus ja tulo ovat aina kokonaislukuja, mutta osamäärä (eli jakolaskun tulos) ei ole aina välttämättä kokonaisluku. Esimerkiksi 1/3 on 0.3333…
Desimaaliluvut
Desimaalimuuttujien tyypit ovat joko float tai double.
Merkkijonot
Merkkijonojen tyyppi on joko char tai String.
char tyyppinen muuttuja voi olla vain yhden merkin mittainen, kun taas String voi olla pitempikin sana.
Totuusarvot
Totuusarvomuuttujan tyyppi on boolean. Tämän tyyppinen muuttuja voi olla suoraan ehtolausekkeen ehtona, katso ehtolauseke.
Tietotyypin muuttaminen
Koska erityyppisillä muuttujilla ei voida laskea, niin muuttujien tietotyyppiä pitää muuttaa laskun ajaksi. Lisäksi laskujen tulokset voivat valehdella.
Esimerkiksi alla oleva ohjelma laskee jakolaskun 2/3, mutta tulos on väärä. Miksi?
class Jakolasku { public static void main(String[] args) { System.out.println("Jakolaskun tulos on "+(2/3)); } }
Koska kokonaisluku 2 jaetaan kokonaisluvulla 3, niin tuloksena on aina kokonaisluku 0. Pyöristys ei tapahdu oikein!
Tyyppimuunokset
Jakolaskun tulos saadaan oikeaksi käyttämällä laskussa kokonaislukujen sijalta desimaalilukuja. Eräs korjaustapa olisi
class Jakolasku { public static void main(String[] args) { System.out.println("Jakolaskun tulos on "+(2.0/3.0)); } }
Nyt jakolaskussa on kaksi double-tyyppistä desimaalilukua, joten tuloskin on desimaaliluku.
Toinen (parempi) keino on käyttää tyyppimuunnosta. Kirjoitetaan luvun (tai muuttujan eteen) suluissa se tietotyyppi, mitä laskussa halutaan käyttää. Tämän jälkeen kyseisessä laskussa tietotyyppi on se. Laskun jälkeen muuttujan tietotyyppi palaa ennalleen.
class Jakolasku { public static void main(String[] args) { System.out.println("Jakolaskun tulos on "+((double)2/(double)3)); } }
Tämä on ainoa keino muuttaa muuttujan tietotyyppiä kesken ohjelman suorituksen.
class Jakolasku { public static void main(String[] args) { int muuttuja1=2, muuttuja2=3; System.out.println("Jakolaskun tulos on " +((double)muuttuja1/(double)muuttuja2)); } }
String-tyyppisen tiedon muuttaminen kokonais- tai desimaaliluvuksi
Kun halutaan muuttaa String tyyppistä tietoa joko kokonaisluvuksi tai desimaaliluvuksi, niin se tapahtuu litanialla:
Integer.parseInt(syote) kokonaisluvuksi
Double.parseDouble(syote) desimaaliluvuksi
Yleensä muutettu luku talletetaan johonkin sopivaan muuttujaan, esimerkiksi
arvaus=Integer.parseInt(syote);
