Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit:

Samankaltaiset tiedostot
Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

6. Muuttujat ja Java 6.1

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

6. Muuttujat ja Java 6.1

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Java-kielen perusteet

7. Näytölle tulostaminen 7.1

Java-kielen perusteet

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

16. Ohjelmoinnin tekniikkaa 16.1

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Java-kielen perusteita

16. Ohjelmoinnin tekniikkaa 16.1

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat ja operaatiot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1

4. Luokan testaus ja käyttö olion kautta 4.1

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

Sisällys. 15. Lohkot. Lohkot. Lohkot

Muuttujat ja kontrolli. Ville Sundberg

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisältö. 22. Taulukot. Yleistä. Yleistä

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

17. Javan omat luokat 17.1

3. Muuttujat ja operaatiot 3.1

7/20: Paketti kasassa ensimmäistä kertaa

20. Javan omat luokat 20.1

17. Javan omat luokat 17.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Kielioppia: toisin kuin Javassa

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Sisällys. 16. Lohkot. Lohkot. Lohkot

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.

14. Hyvä ohjelmointitapa 14.1

ITKP102 Ohjelmointi 1 (6 op)

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Java-kielen perusteita


Tietotyypit ja operaattorit

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Taulukot. Jukka Harju, Jukka Juslin

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

etunimi, sukunimi ja opiskelijanumero ja näillä

11. Javan valintarakenteet 11.1

8. Näppäimistöltä lukeminen 8.1

1. Omat operaatiot 1.1

Taulukot, silmukat ja muut joka koodin pikku veijarit

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

12. Javan toistorakenteet 12.1

ITKP102 Ohjelmointi 1 (6 op)

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Java-kielen perusteet

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Ohjelmoinnin perusteet Y Python

Tietueet. Tietueiden määrittely

11. Javan toistorakenteet 11.1

12. Näppäimistöltä lukeminen 12.1

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Ohjelmointi 1 Taulukot ja merkkijonot

7. Oliot ja viitteet 7.1

13. Hyvä ohjelmointitapa (osa 1) 13.1

Ohjelmoinnin perusteet Y Python

12. Javan toistorakenteet 12.1

8. Näppäimistöltä lukeminen 8.1

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

11. Javan valintarakenteet 11.1

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

18. Abstraktit tietotyypit 18.1

Python-ohjelmointi Harjoitus 2

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Ohjelmointiharjoituksia Arduino-ympäristössä

4. Lausekielinen ohjelmointi 4.1

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

5. HelloWorld-ohjelma 5.1

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Luento 2: Tiedostot ja tiedon varastointi

Osoitin ja viittaus C++:ssa

Ohjelmoinnin peruskurssi Y1

5. HelloWorld-ohjelma 5.1

Harjoitus 2 (viikko 45)

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

812341A Olio-ohjelmointi, Olio-ohjelmoinnin peruskäsitteet ja Java-kieli

1. luento. Ohjelmointi (C) T0004 Syksy luento. 1. luento. 1. luento. 1. luento. kurssin sisältö ja tavoitteet työmuodot.

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

Harjoitus 3 (viikko 39)

Transkriptio:

Sisällys 6. Muuttujat ja Java Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut, merkit, totuusarvot. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi String. Vakiot. 6.1 6.2 Muuttujien nimeäminen Muuttujien nimeäminen Javan tunnuksissa, kuten muuttujien, operaatioiden ja ohjelman nimissä, voi käyttää kirjaimia, numeroita sekä alaviiva (_) ja dollari ($) -merkkejä. Java käyttää monipuolista Unicode-merkistöä, mutta koodaaminen on helpompaa, jos käyttää vain kirjaimia a ö ja A Ö sekä numeroita. Koska skandinaaviset merkit (å, ä, ö, Å, Ä, Ö) saattavat olla ongelmallisia tiedoston nimessä, on turvallisinta nimetä ohjelma ilman näitä merkkejä. Paattelya-tunnus on huonoa suomea, mutta toisaalta Päättelyä.javatiedosto voi olla ongelma käyttöjärjestelmälle. Toisin kuin ohjelman tunnus, muuttujien tunnukset aloitetaan pienellä kirjaimella. Tunnuksessa ei voi käyttää välilyöntiä. Välilyöntiä ei korvata Javakielessä alaviivalla, vaan useasta sanasta koostuvissa nimissä sanat kirjoitetaan yhteen. Sanat erotetaan toisistaan aloittamalla kukin sana ensimmäistä sanaa lukuun ottamatta isolla alkukirjaimella. Esimerkiksi: arvattuluku tai syntymäpäivä. Tunnusta ei saa aloittaa numerolla. 6.3 6.4

Muuttujien nimeäminen Muuttuja tulee nimetä siten, että nimestä käy ilmi muuttujan käyttötarkoitus. Esimerkiksi syntymäpäivä on paljon informatiivisempi kuin s. Yleensä muuttujan nimi on kompromissi: nopeasti kirjoitettavissa, mutta vielä ymmärrettävissä. Hyvään ohjelmointitapaan kuuluu myös koodin kommentointi ja koodin sisentäminen asianomaisissa kohdissa. Muuttujan tyypin määritys Vuokaavioissa tyypit on määritelty hyvin heikosti. Muuttujan arvon tyyppi (luku, merkki tai merkkijono) on toistaiseksi päätelty epäsuorasti esimerkiksi muuttujan nimen, muuttujan arvon tai tehtävänannon avulla. Java on monien lausekielien tapaan vahvasti tyypitetty kieli, jossa muuttujille on aina erikseen määriteltävä tietotyyppi (data type) eli tyyppi. Javassa tyyppien ilmaisuun on varattu englanninkieliset sanat. Esimerkiksi varattu sana int osoittaa, että kyseessä on kokonaislukutyyppisen arvon omaava muuttuja. Tyypin nimeä ei voi käyttää esimerkiksi muuttujan nimenä. 6.5 6.6 Muuttujan tyypin määritys Muuttujan tyypin määritys Muuttujan tyyppi annetaan muuttujan esittelyn (declaration) yhteydessä. Esittelylause yleisesti: tyyppi nimi; Esittely on ensimmäinen kerta, jolloin muuttuja esiintyy lähdekoodissa. Muuttuja esitellään vain kerran. Samannimiset muuttujat aiheuttavat käännösvirheen. Muuttujien ikä ja sukunimi esittely. Aiemmin esittely tapahtui alkuarvon asettamisen (alustuksen) yhteydessä: ikä 14 sukunimi "Snow" Javassa esittely on oma lauseensa, jolloin alustus voidaan tehdä myöhemmin: int ikä; String sukunimi; Useissa lausekielissä, Java mukaan lukien, ei ole omaa merkintää sijoitusoperaatiolle, vaan yhtäsuuruusmerkki (=) on varattu arvojen sijoittamiseen muuttujaan ja arvojen yhtäsuuruuden vertailuun käytetään kahta yhtäsuuruusmerkkiä (==). Esimerkki: muuttujan aika esittely, alustus ja vertailu: Vuokaavioissa: i 1 lkm > 0 Javassa: int i; i = 1; if (lkm > 0) 6.7 6.8

Muuttujan tyypin määritys Javan tietotyypit Sijoitusoperaatio voidaan yhdistää myös esittelyyn, jolloin esittely ja alustaminen voidaan suorittaa yhdellä lauseella. Yleisesti: tyyppi nimi = arvo; Muuttujien ikä ja sukunimi esittely ja alustus: int ikä = 14; String sukunimi = "Snow"; Muuttujat voidaan esitellä joko aivan ohjelman alussa tai sitä mukaan kuin tarvitaan. Esitellään toistaiseksi ohjelman alussa, koska jälkimmäinen tapa vaatii näkyvyyssääntöjen tuntemista. Esittelytavasta riippumatta Java tarkistaa, että ohjelmassa käytettävä muuttuja on alustettu. Javan tietotyypit voidaan jakaa alkeistietotyyppeihin (primitive data types), jotka ovat: kokonaislukutyypit byte, short, int ja long, liukulukutyypit float ja double, merkkityyppi char ja totuusarvotyyppi boolean (true ja false) ja viitetietotyyppeihin (reference data types), jotka ovat luokka-, rajapinta- ja taulukkotietotyypit. Tehtävä määrää minkä tyyppisiä ja kokoisia lukuja on syytä käyttää. Yleensä int- ja double-tyypit riittävät laskentaan. 6.9 6.10 Kokonaisluvut Kokonaisluvut Koko ilmaistaan tavuina (byte, B). Tavu: kahdeksan bittiä, 2 8 = 256 arvoa. Bitti (bit, b): tiedon pienin mittayksikkö. Kaksi toisensa poissulkevaa arvoa, usein 0 tai 1. Esimerkiksi short-tyyppisenä esitelty luku 273 on kooltaan 2 B eli 16 b ja sen bitit ovat: 00000001 00010001. Usein eniten merkitsevä bitti on ensimmäinen vasemmalla. 0 2 15 + 0 2 15 + + 1 2 8 + + 1 2 4 + + 0 2 1 + 1 2 0 = 273 Tietokone käsittelee tietoa sanan (word) kokoisina yksiköinä. Sana koostuu tavuista. Nykyisin yleisimmät sanan pituudet ovat 4 B (32 b) ja 8 B (64 b). Tyyppi Koko Pienin arvo Suurin arvo byte short int long 1 B (8 b) 2 B (16 b) 4 B (32 b) 8 B (64 b) -2 7 = -128 2 7-1 = 127-2 15 = -32768 2 15-1 = 32767-2 31 = -2147483648, Vakiona: Integer.MIN_VALUE -2 63 = -9223372036854775808, Vakiona: Long.MIN_VALUE 2 31-1 = 2147483647 Vakiona: Integer.MAX_VALUE 2 63-1 = 9223372036854775807 Vakiona: Long.MAX_VALUE 6.11 6.12

Kokonaisluvut Luvun ensimmäinen (merkitsevin) bitti on positiivisilla luvuilla 0 ja negatiivisilla 1. Negatiiviset luvut saadaan positiivista niin sanottuna kahden komplementtina: käännetään bitit ja lisätään 1. Esim. 10-järjestelmän luku 14 on 8-bittisenä (byte) binäärilukuna 00001110 (2 3 + 2 2 + 2 1 = 14). Kahden komplementti: 11110001 + 00000001 ---------- 11110010 = -14 Liukuluvut Desimaalilukujen esittämiseen. Desimaalierottimena käytetään pilkun sijasta pistettä. Likiarvoja, laskennassa käytetään pyöristystä. Yhtäsuuruuden kanssa kannattaa siis varoa: voi olla, että joskus a (b c) (a b) c. Liukuluvut voidaan esittää tieteellisessä muodossa x 10 y, jota merkitään ohjelmassa xey tai xey. Esimerkiksi luku 120,123 = 1,20123 10 2, esitetään Javassa joko 120.123, 1.20123e2 tai 1.20123E2. 6.13 6.14 Liukuluvut Tyyppi Koko Pienin itseisarvo Suurin itseisarvo float double 4 B (32 b) 8 B (64 b) 2-149 Float.MIN_VALUE 2-1074 Double.MIN_VALUE (2-2 -23 ) 2 127 Float.MAX_VALUE (2-2 -52 ) 2 1023 Double.MAX_VALUE Liukulukujen esitystavan vuoksi niiden arvoalue on huomattavasti kokonaislukujen arvoaluetta suurempi. Liukulukuarvot ovat oletusarvoisesti double-tyyppisiä. Tästä johtuen lause: float korkeus = 1.5; on virheellinen. Arvon saa float-tyyppiseksi lisäämällä sen loppuun joko f- tai F-kirjaimen. Esimerkkejä: 1.5f, 1.5F, 1.20123e2f, 1.20123e2F. Totuusarvotyyppi boolean Tyypillä vain arvot true (kyllä, tosi) ja false (ei, epätosi). Arvoilla ei ole järjestystä. Kokonaisluvut 0 ja 1 eivät vastaa totuusarvoja. Totuusarvoisten muuttujien esittelyjä ja alustuksia. boolean oviauki; oviauki = true; boolean lukuok = false; Totuusarvon negaatiota merkitään huutomerkillä (!).!true == false!false == true // Alustetaan todeksi. boolean ekakierros = true; // Tästä tulostuu epätosi, // koska NOT true = false. System.out.println(!ekaKierros); 6.15 6.16

Merkkityyppi char Yksittäisten merkkien esittämiseen. Arvot esitetään yksinkertaisilla lainausmerkeillä (') eli niin sanotuilla hipsuilla. char vastaus = k ; Isot ja pienet kirjaimet ovat eri asia. Esimerkiksi arvot e ja E eivät ole sama kirjain. Java käyttää Unicode-merkistöä, jossa merkille on varattu tilaa 16 bittiä. Merkki on myös luku välillä 0 65535. Esimerkiksi luku 32 vastaa välilyöntimerkkiä, joka on ASCIImerkistön (osa Unicode-merkistöä) ensimmäinen tulostuva merkki. Tyyppien yhteensopivuus sijoituksessa Sijoitusoperaatiossa operandien tyyppien on oltava yhteensopivat, jotta ohjelma kääntyisi. Kokonais-, liukuluku- ja merkkityyppejä voidaan sijoittaa toisiinsa, mikäli kohdetyyppi on kooltaan (arvoalueeltaan) riittävän suuri. boolean-tyyppi on yhteensopiva vain itsensä kanssa. Suurempaan kokonaislukutyyppiin (liukulukuun) mahtuu pienempi kokonaislukutyyppi (liukuluku). Liukulukutyyppiseen muuttujaan voi sijoittaa mitä tahansa kokonaislukutyyppiä olevan arvon, koska kokonaislukujen arvoalue sisältyy liukulukujen arvoalueeseen. 6.17 6.18 Tyyppien yhteensopivuus sijoituksessa Viitetietotyypit // Kokonaislukuja. int i = 1; long l = 1; // Liukulukuja. float f = 1; double d = 1; // Sijoituksia. l = i; // Oikein. i = l; // Väärin. d = f; // Oikein. f = d; // Väärin. // Kokonaisluku mahtuu // liukulukumuuttujaan. f = l; // Oikein. d = i; // Oikein. // Liukuluku ei mahdu // kokonaislukumuuttujaan. l = f; // Väärin. i = d; // Väärin. Alkeis- ja viitetyyppiset muuttujien arvot liitetään tunnuksiin eri tavoin. Muuttujien arvot tallennetaan johonkin paikkaan (osoitteeseen) keskusmuistissa. Alkeistietotyyppisten muuttujien arvot löytyvät suoraan tunnukseen liittyvästä muistiosoitteesta. public class OmaOhjelma { int kokoluku = 42; } Keskusmuisti Osoite Arvo 3FFFFFFF 42 00000000 6.19 6.20

Viitetietotyypit Viitetyyppisten muuttujien voidaan ajatella liittyvän arvoonsa epäsuorasti: tunnus viittaa muistiosoitteeseen, jonka kautta arvo löytyy. Javan viitteet ovat eri asia kuin C++:n viitteet ja osoittimet. Viitteet turvallisia osoittimia, joilla ei voi harrastaa esimerkiksi aritmetiikka. public class OmaOhjelma { String nimi = "Frodo"; } Keskusmuisti Osoite Arvo 40000009 'F' 3FFFFFFF 40000009 00000000 String-merkkijonotyyppi Yksittäisten merkkien yhdistelmää kutsutaan merkkijonoksi. Arvot esitetään lainausmerkkien (") avulla. String sukunimi = "Meikäläinen"; Merkkijonon arvo voi olla nollan merkin mittainen tyhjä merkkijono. String tulos = ""; Myös yksittäiset lainausmerkkeihin suljetut merkit ovat merkkijonoja. // Yhdestä a-merkistä koostuva merkkijono ja yksittäinen merkki. String merkkijono = "a"; char merkki = a ; String-tyyppi kuuluu viitetyyppeihin (luokkiin), mutta tätä tyyppiä voidaan käyttää alkeistyypin myös tapaan! 6.21 6.22 String-merkkijonotyyppi Merkkijonoon voidaan yhdistää yhteenlaskuoperaatiolla (+) alkeistyyppinen arvo tai toinen merkkijono. String ekamjono = "opinto"; String tokamjono = "piste"; // "opintopiste" String kolmasmjono = ekamjono + tokamjono; String tulosteksti = "Tulos oli "; int tulos = 10; // "Tulos oli 10." System.out.println(tulosTeksti + tulos + "."); Vakiot Vakiot (constant) ovat muuttujia, joiden arvoa ei voi muuttaa alustamisen jälkeen. Vakiot esitellään Javassa final-määreellä. Vakioiden tunnukset kirjoitetaan aina ISOIN KIRJAIMIN, jotta ne erottuvat paremmin muuttujista. Vakio alustetaan yleensä esittelynsä yhteydessä. final double PII = 3.14; // Kääntäjä ei hyväksy uutta sijoitusta. PII = 3.1415; Kuuluvat hyvään ohjelmointitapaan. 6.23 6.24

Vakiot Hyödyllisiä, kun tiettyä arvoa käytetään monessa kohtaa lähdekoodissa: Arvo voidaan muuttaa kätevästi vain muuttamalla vakion alustuslausetta! Oheisessa esimerkissä piin likiarvon muuttuessa tarvitsee muuttaa vain yhtä lausetta. // Arvo 3.14 kahdessa // lauseessa. double ala = 3.14 * r * r; double keha = 2 * 3.14 * r; // Arvo 3.14 vakiona. final double PII = 3.14; double ala = PII * r * r; double keha = 2 * PII * r; 6.25