6. Muuttujat ja Java.

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

18. Abstraktit tietotyypit
15. Loogiset operaatiot.
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
6. Metodit.
@ Leena Lahtinen Helia TIETO JA TIETOKONEOHJELMA  TIETOKONEOHJELMA KÄSITTELEE TIETOJA  TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA.
JavaScript (c) Irja & Reino Aarinen, 2007
1 Ehtolausekkeet Ehdot, valintalausekkeet Boolean-algebra.
1. Algoritmi.
Rakenteinen ohjelmointi
22. Taulukot.
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
13. Pakkaukset.
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ VARTEN.
TyyppimuunnoksettMyn1 Tyyppimuunnokset Joskus kääntäjän on tehtävä itse päätöksiä, jos ohjelmoija ei ole ajatellut yksityiskohtia: int arvo1=10; long arvo2=25;
16. Lohkot Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat.
Ohjelmoinnin tekniikkaa Sisällys for -lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely.
TAULUKKO YKSIULOTTEINEN TAULUKKO. TAULUKKO  Taulukon tarkoitus Ohjelmassa tarvitaan paljon samantyyppisiä samaan kohdealueeseen kuuluvia muuttujia Näitä.
TIETO JA TIETOKONEOHJELMA TIETOKONEOHJELMA KÄSITTELEE TIETOJA TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA MENETELMILLÄ.
13. Hyvä ohjelmointitapa (osa 1)
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 2 Ensimmäiset ohjelmat © Jukka Harju, Jukka Juslin.
7. Oliot ja viitteet.
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
Visual Basic -ohjelmointi
String-vertailusta ja Scannerin käytöstä (1/2)
11. Javan toistorakenteet
Tietotyypit Tietotyyppi määrittää muuttujan sisältämän datan luonnetta, muistista tarvittavaa tilaa ja sitä, millaisia operaatioita siihen voidaan kohdistaa.
20. Javan omat luokat.
SQL Standardoitu kieli, jonka avulla voidaan
Muuttujat ja vakiottMyn1 Muuttujat ja vakiot PHP-kielen syntaksi on lainattu suurimmaksi osaksi C- kielestä. PHP on erityisesti HTML-dokumenttien sisään.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Näppäimistöltä lukeminen Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In -luokka.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
22. Taulukot.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
@ Leena Lahtinen TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA:  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ.
© Jukka Juslin1 Osio2 Olio-ohjelmointi: Merkkijonot eli Stringit Jukka Juslin.
Johdatus ohjelmointiin – C kielen peruselementit Tutkijayliopettaja Manne Hannula Opetusharjoittelu (ohjaava opettaja Jukka Jauhiainen)
2. Lisää Java-ohjelmoinnin alkeita
Aakkosnumeerinen tieto Tarkoittaa kaikkea muuta tietoa paitsi laskentaan tarkoitettuja lukuja Muuttujan tietosisältö on siis tekstitietoa Muuttujan tietotyypiksi.
Visual Basic -ohjelmointi
Tuloksellinen Java-ohjelmointi Luku 2 Ensimmäiset ohjelmat
Visual Basic -ohjelmointi
15. Ohjelmoinnin tekniikkaa
Kiikuista jatkoa.
String-vertailusta ja Scannerin käytöstä (1/2)
6. Muuttujat ja Java.
3. Muuttujat ja operaatiot
6. Muuttujat ja Java.
17. Javan omat luokat.
8. Näppäimistöltä lukeminen
13. Loogiset operaatiot.
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
3. Muuttujat ja operaatiot
7. Näytölle tulostaminen
9. Aritmeettiset operaatiot
10. Javan ohjausrakenteet
9. Aritmeettiset operaatiot
16. Ohjelmoinnin tekniikkaa
14. Hyvä ohjelmointitapa.
4. Attribuutit.
7. Näytölle tulostaminen
6. Muuttujat ja Java.
13. Loogiset operaatiot.
3. Attribuutit.
4. Luokan testaus ja käyttö olion kautta
16. Ohjelmoinnin tekniikkaa
Esityksen transkriptio:

6. Muuttujat ja Java

Sisällys Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut. boolean- ja char-tyypit. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi String. Vakiot.

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ä. Esim. Paattelya-tunnus on huonoa suomea, mutta toisaalta Päättelyä.java-tiedosto voi olla ongelma käyttöjärjestelmälle.

Muuttujien nimeäminen Toisin kuin ohjelman tunnus, muuttujien tunnukset aloitetaan pienellä kirjaimella. Tunnuksessa ei voi käyttää välilyöntiä. Välilyöntiä ei korvata Java-kielessä alaviivalla, vaan useasta sanasta koostuvissa nimissä sanat kirjoitetaan yhteen. Sanat erotetaan toisistaan aloittamalla kukin sana ensimmäistä sanaa lukuun ottamatta isolla alkukirjaimella. Esim. arvattuLuku, salinOvi tai syntymapaiva. Tunnusta ei saa aloittaa numerolla.

Muuttujien nimeäminen Muuttuja tulee nimetä siten, että nimestä käy ilmi muuttujan käyttötarkoitus. Esimerkiksi syntymapaiva on paljon informatiivisempi kuin pelkkä 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 ja pseudokoodissa tyypit on määritelty hyvin heikosti. Muuttujan arvon laatu on toistaiseksi päätelty epäsuorasti esimerkiksi muuttujan nimen, sijoituslauseen ja/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. Tyypeille on varattu englanninkieliset sanat. Esimerkiksi varattu sana int osoittaa, että kyseessä on kokonaislukutyyppisen arvon omaava muuttuja.

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. Esim. muuttujien arvaus ja etunimi esittely: Aiemmin esittely tapahtui alkuarvon asettamisen (alustuksen) yhteydessä: arvaus ← 10; etunimi ← "Matti"; Javassa esittely on oma lauseensa, jolloin alustus voidaan tehdä myöhemmin: int arvaus; String etunimi;

Muuttujan tyypin määritys 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ä (==). Esim. muuttujan apu esittely, alustus ja vertailu: Aiemmin: apu ← 1; if (apu = 1) ... Java: int apu; apu = 1; if (apu == 1) …

Muuttujan tyypin määritys Sijoitusoperaatio voidaan yhdistää myös esittelyyn, jolloin esittely ja alustaminen voidaan suorittaa yhdellä lauseella. Yleisesti: tyyppi nimi = arvo; Esim. muuttujien arvaus ja etunimi esittely ja alustus: int apu = 1; String etunimi = "Matti";

Javan tietotyypit Javan tietotyypit voidaan jakaa alkeistietotyyppeihin (primitive data types): - kokonaisluvut: byte, short, int ja long - liukuluvut (desimaaliluvut): float ja double - merkit: char - totuusarvot: boolean (arvot true ja false) ja viitetyyppeihin (reference data types): luokka-, rajapinta- ja taulukkotietotyypit. Tehtävä määrää minkä tyyppisiä ja kokoisia lukuja on syytä käyttää. Yleensä selviää hyvin int- ja double-tyypeillä. Muuttujilla ei voi olla rajapintatyyppistä arvoa.

Kokonaisluvut Koko ilmaistaan tavuina (byte, B). Tavu: kahdeksan bittiä, 28 = 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 ∙ 215 + 0 ∙ 215 + … + 1 ∙ 28 + … + 1 ∙ 24 + … + 0 ∙ 21 + 1 ∙ 20 = 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).

Kokonaisluvut Tyyppi Koko Pienin arvo Suurin arvo byte 1 B (8 b) -27 = -128 27 - 1 = 127 short 2 B (16 b) -215 = -32768 215 - 1 = 32767 int 4 B (32 b) -231 = -2147483648, Vakiona: Integer.MIN_VALUE 231 - 1 = 2147483647 Vakiona: Integer.MAX_VALUE long 8 B (64 b) -263 = -9223372036854775808, Vakiona: Long.MIN_VALUE 263 - 1 = 9223372036854775807 Vakiona: Long.MAX_VALUE

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 (23 + 22 + 21 = 14). Kahden komplementti: 11110001 + 00000001 ---------- 11110010 = -14

Liukuluvut Desimaalilukujen esittämiseen. Desimaalierottimena käytetään pistettä. Likiarvoja, laskennassa käytetään pyöristystä. Yhtäsuuruuden kanssa kannattaa siis varoa: voi olla, että joskus a  (b  c) ≠ (a  b)  c. Noudattavat IEEE 754 -standardia. Liukuluvut voidaan esittää “tieteellisessä” muodossa x ∙ 10y, jota merkitään ohjelmassa xey tai xEy. Esim. 120,123 = 1,20123∙102, esitetään Javassa joko 120.123, 1.20123e2 tai 1.20123E2.

Liukuluvut Tyyppi Koko Pienin itseisarvo Suurin itseisarvo float 4 B (32 b) 2-149 Float.MIN_VALUE (2 - 2-23) · 2127 Float.MAX_VALUE double 8 B (64 b) 2-1074 Double.MIN_VALUE (2 - 2-52) · 21023 Double.MAX_VALUE Liukulukujen esitystavan vuoksi niiden arvoalue on huomattavasti kokonaislukujen arvoaluetta suurempi. Liukulukuarvot ovat oletusarvoisesti double-tyyppisiä. Tästä johtuen lause final float PII = 3.14; on virheellinen. Arvon saa float-tyyppiseksi lisäämällä sen loppuun joko f- tai F-kirjaimen. Esim. 3.14f, 3.14F, 1.20123e2f , 1.20123e2F.

Totuusarvotyyppi boolean Tyypillä vain arvot true (tosi) ja false (epätosi). Arvoilla ei ole järjestystä. Kokonaisluvut 0 ja 1 eivät vastaa totuusarvoja. Esim. totuusarvoisten muuttujien esittelyjä ja alustuksia. boolean oviAuki; oviAuki = true; boolean lukuOK = false; Totuusarvon negaatiota merkitään huutomerkillä (!): !true == false !false == true boolean ekaKierros = true; do { ... if (!ekaKierros) { // Tänne tullaan, // jos _ei_ ole 1. kierros.

Merkkityyppi char Yksittäisten merkkien esittämiseen. Arvot esitetään yksinkertaisilla lainausmerkeillä (') eli niin sanotuilla hipsuilla. Esim. 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ä. Huom! Merkki on myös luku välillä 0…65535. Esim. Luku 32 vastaa välilyöntimerkkiä, joka on ASCII-merkistö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.

Tyyppien yhteensopivuus sijoituksessa Esim. yhteensopivia ja epäyhteensopivia sijoituksia. // 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.

Viitetietotyypit 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. Esim. public class OmaOhjelma { ... int kokoluku = 42; ... } Keskusmuisti Osoite Arvo ... 3FFFFFFF 42 00000000

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. Esim. public class OmaOhjelma { ... String nimi = "Frodo"; ... } Keskusmuisti Osoite Arvo ... 40000009 'F' 3FFFFFFF 00000000

String-merkkijonotyyppi Yksittäisten merkkien yhdistelmää kutsutaan merkkijonoksi. Arvot esitetään lainausmerkkien (") avulla. Esim. String sukunimi = "Meikäläinen"; Myös yksittäiset lainausmerkkeihin suljetut merkit ovat merkkijonoja. String-tyyppi kuuluu viitetyyppeihin (luokkiin), mutta tätä tyyppiä voidaan käyttää alkeistyypin tapaan!

String-merkkijonotyyppi String-tyypistä kerrotaan lisää myöhemmin. Merkkijonomuuttujia voidaan yhdistää yhteenlasku-operaatiolla (+). Esim. String ekaMjono = "opinto"; String tokaMjono = "piste"; // "opintopiste" String kolmasMjono = ekaMjono + tokaMjono;

String-merkkijonotyyppi Merkkijonoon voidaan liittää yhteenlasku-operaatiolla myös alkeistyyppisiä arvoja. Esim. String tulosTeksti = "Tulos oli "; int tulos = 10; // "Tulos oli 10." tulosTeksti = tulosTeksti + tulos + "."; System.out.println(tulosTeksti);

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ä. Esim. final double PII = 3.14; // Kääntäjä ei hyväksy uutta sijoitusta. PII = 3.1415; Kuuluvat hyvään ohjelmointitapaan.

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;