====== 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);
[[Java:Tietotyypit:Tehtavia]]