Liht- ja struktuurandmetüübid. Massiivid. Lihttüübid (algtüübid) (ingl.k. primitive types) byte - 8-bitine täisarv vahemikus -128 kuni 127. short - 16-bitine täisarv -32768 kuni 32767. int - 32-bitine täisarv -2147483648 kuni 2147483647. long - 64-bitine täisarv -9223372036854775808 kuni 9223372036854775807. float - 32-bitine reaalarv ligikaudses vahemikus -3,4x10^38 kuni 3,4x10^38 seitsme tüvekohaga. double - 64-bitine ujukomaarv (reaalarv) ligikaudses vahemikus -1,7x10^308 kuni 1,7x10^308 15 tüvekohaga. char - 16-bitine Unicode sümbol. Näit. 'a', '\n', boolean - tõeväärtustüüp võimalike väärtustega true ja false. Need kaheksa on "lihtsad" andmetüübid ilma riugasteta. Kui sinna tüüpi muutujasse midagi kirjutada, siis pole karta, et temaga "iseenesest" midagi juhtuks. Neid saab kasutada sarnaselt, nagu muutujaid pascaliski. Tüüpiliselt kasutatavaks täisarvuks on int ning reaalarvuks double. Tüüp byte on ühebaidine nagu üks bait kettalgi. Tüüp char on javas 16-bitine (pascali 8 vastu) ning tal on üle 64 tuhande võimaliku väärtuse. Enamik Euroopa keeli saab väikeste mööndustega 256 tähega hakkama, mida 8 bitti pakuvad, kuid ka hieroglüüfe sisaldavate ja muid paljutäheliste keelte edasiandmiseks on lihtsam kasutada igale sümbolile ühte tähte, siis ei pea imenippe rakendama tähtede surumiseks sinna, kuhu need ei mahu. Tähed kirjutatakse ühekordsete ülakomade vahele nagu näiteks 'm'. "m" on kompilaatori jaoks juba enam mitte lihttüüp char, vaid struktuurne tüüp String. Enamasti ongi programmides lihtsam kasutada sõnet kui tähte. Lihttüüpide nimed kirjutatakse väikese tähega, struktuurtüüpide omad soovitatavalt suurega. Siis on kirjutamise käigus hea eristada, millega on tegu. Täisarve saab lisaks kümnendsüsteemile kirjutada ka kaheksand- ja kuueteistkümnendsüsteemis. Kaheksandsüsteemis arvule tuleb ette kirjutada 0, kuueteistkümnendsüsteemis arvule 0x. Nii et 12, 014 ja 0xC on java kompilaatori jaoks üks ja seesama asi. Enamasti piisab kasu- tamisel kümnendsüsteemist, kuid pildi joonistamisel kaheksat värvi kasutades on hea pildi punkte masinale kaheksandsüsteemis ette kirjutada või mälust lugeda. Täisarvud loeb kompilaator automaatselt olevaks tüübis int. Kui soovime talle rõhutada, et tegu on nimelt tüübist short, siis tuleb tüübi nimi arvule sulgudes ette kirjutada nt. (short)12 . Sama lugu ka reaalarvudega, kus automaatselt arvab kompilaator punkti esinemise korral olevat tegemist kahekordse täpsusega ujukomaarvuga (double). Tüüpi long saab rõhutada, lisades arvu lõppu tähe l nt. 12345l ning float puhul võib lõppu lisada tähe f. Klaviatuurilt saab sisestada vaid sõnena. Juhul kui meil on vaja sisestatut intepreteerida mõne teise tüübina, siis tuleb tüüp vastavate meetodite abil muuta. Sõne püüab täisarvuliseks objektiks muuta klassi Integer meetod valueOf. Et objektist (kus on lisaks väärtusele ka meetodid) väärtust kätte saada, tuleb käivitada ta meetod (ehk saata talle teade) intValue(). import java.io.*; public class Sisse1{ public static void main(String argumendid[]) throws Exception{ int arv; double distants; String s; PrintWriter valja=new PrintWriter(System.out, true); BufferedReader sisse=new BufferedReader( new InputStreamReader(System.in) ); valja.println("Osalejate arv:"); s=sisse.readLine(); arv=Integer.valueOf(s).intValue(); valja.println("Vahemaa:"); distants=Double.valueOf(sisse.readLine()).doubleValue(); valja.println("Kokku läbiti "+arv*distants+" km"); } } Käsklus import java.io.* lubab kasutada paketti java.io kuuluvaid kõiki klasse. Siin programmis on neist kasutatud PrintWriter, BufferedReader ja InputStreamReader. InputStreamReader'it kasutatakse selles progammis sisendvoost System.in saabuva BufferedReader'ile "söödavaks muutmiseks". Hulga ühetüübiliste andmete hoidmiseks ja kasutamiseks saab kasutada massiive. --- public class Massiiv1{ public static void main(String argumendid[]){ int[] ruudud = new int[5]; for(int i=0; i<5; i++){ ruudud[i]=i*i; } System.out.println("Arvu 2 ruut on "+ruudud[2]); } } --- Massiivi elemendid hakkavad lugema numbrist 0. Korraldus new int[5] loob viie- elemendilise täisarvumassiivi, mille esimeseks elemendiks on element järjenumbriga 0 ning viimase elemendi järjenumbriks on 4. Esimeses kümnes võib selline lähenemine paista harjumatuna, kuid alustades nullist, algab järgmine kümme arvust 10 (mitte 11). Tegemist on sama probleemiga, et kas uut aastatuhandet hakata lugema aastast 2000 või 2001. Java (ning ka C ja mõnes muuski) keeles loetakse numbreid alates nullist nagu sündinud lapsel, kes saab aastaseks alles pärast ühe aasta möödumist sünnist. Massiivi elemendid võib ka massiivi loomisel algväärtustada. public class Massiiv2{ public static void main(String argumendid[]){ String nimed[]={"Juku", "Kati", "Siim"}; System.out.println("Nimekirja alguses on "+nimed[0]); System.out.println("Kogu nimekiri koosneb nimedest:"); for(int nr=0; nr