Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

© Lewis & Loftus & Jukka Juslin1 Tietotyypit ja lausekkeet.

Samankaltaiset esitykset


Esitys aiheesta: "© Lewis & Loftus & Jukka Juslin1 Tietotyypit ja lausekkeet."— Esityksen transkriptio:

1 © Lewis & Loftus & Jukka Juslin1 Tietotyypit ja lausekkeet

2 © Lewis & Loftus & Jukka Juslin2 Tietotyypit Perustavaa laatua olevia ohjelmoinnin käsitteitä Luku 2 käsittelee seuraavia:  Merkkijonot  Primitiivitietotyypit (eli alkeistietotyypit)  Muuttujien esittely ja käyttös  Ilmaisut ja operaattoreiden presedenssi  Tiedon muuttaminen tyypistä toiseen  Syötteen lukeminen käyttäjältä

3 © Lewis & Loftus & Jukka Juslin3 Missä ollaan? Merkkijonot Muuttujat ja sijoittaminen Primitiivitietotyypit Ilmaisut Tiedon konvertointi (kastaus) Interaktiiviset ohjelmat

4 © Lewis & Loftus & Jukka Juslin4 Merkkijono eli String String on merkkijono: tälläinen jono esitetään laittamalla lainausmerkit tekstin ympärille: Esimerkkejä: “Tämä on String literaali." “Ratapihantie 13" “Y" Jokainen String on olio, joka määritellään Javassa String luokassa Jokainen String literaali esittää String oliota

5 © Lewis & Loftus & Jukka Juslin5 println metodi ja String Olemme jo aikaisemmin kutsuneet println metodia tulostaaksemme Stringin System.out olio esittää kohdetta, jonne voimme Stringin lähettää System.out.println (“Ole mikä tähansa, mutta ole hyvä."); olio metodin nimiinformaatio metodille (parametrit), tässä tapauksessa String

6 © Lewis & Loftus & Jukka Juslin6 print metodi System.out oliossa oli myös tapa tulostaa Stringejä toisella tavalla print metodi on sama kuin println metodi, mutta tulostus ei vaihda riviä \n merkin avulla lopuksi (ns. Backslash merkit tulosteen ohjauksessa)

7 © Lewis & Loftus & Jukka Juslin7 Stringien konkatenointi String konkatenointioperaattori plusssaa (+) käytetään liittämään yhteen Stringiin toinen “Yksi kahvi " + “ ja maitoa" Plus-operaattoria voidaan myös käyttää liittämään numero Stringiin Yhtä String literaalia ei voi voi hajoittaa kahdelle riville ohjelmassa

8 © Lewis & Loftus & Jukka Juslin8 Stringien konkatenointi + operaattoria käytetään myös aritmeettiseen summaukseen (vrt. 1 + 1) Mikä funktio toimii missäkin yhteydessä riippuu siitä minkälaisella tiedolla sitä kutsutaan (tämä liittyy myös ylikuormitukseen, jota käsittelemme myöhemmin) Jos molemmat operandit ovat Stringejä tai jos yksi operandi on String ja toinen esim. Int + suorittaa String konkatenaation Jos molemmat operandit ovat numeerisia, Java lisää ne toisiinsa (esim. 1+1) + operaattori evaluoidaan vasemmalta oikealle, mutta sulkeita voidaan käyttää muuntelemaan evaluointijärjestystä (pakottaa muutos)

9 © Lewis & Loftus & Jukka Juslin9 Escapet merkkijonoissa Mitä jos haluamme tulostaa lainausmerkin? Seuraava rivi hämäisi kääntäjää, sillä toinen lainausmerkki tulkittaisiiin Stringin lopuksi: System.out.println (“Sanoin “Moro" sinulle."); Escape komento ilmaisee jonon merkkejä, jotka esittävät erikoismerkkejä Eskape komento aloitetaan aina kenoviivalla (backslash vrt. slash, vrt. usa näppäimistö) System.out.println (“Sanoin \“Moro\" sinulle.");

10 © Lewis & Loftus & Jukka Juslin10 Escape merkit Joitain Java escape merkkejä: Escape merkit \b \t \n \r \" \' \\ Tarkoitus backspace tab uusi rivi rivin vaihto (carriage return) double quote single quote backslash

11 © Lewis & Loftus & Jukka Juslin11 Missä ollaan? Merkkijonot Muuttujat ja sijoittaminen Primitiivitietotyypit Ilmaisut Tiedon muuttaminen (kastaus) Interaktiiviset ohjelmat Grafiikka

12 © Lewis & Loftus & Jukka Juslin12 Muuttujat muuttuja (tästä käytetään joskus myös nimikettä attribuutti) on muistissa olevan muistipaikan nimi Muuttuja pitää esitellä määrittelemällä muuttujan nimi ja minkätyyppistä tietoa se tulee sisältämään int summa; int laskuri, temp, tulos; Useita muuttujia voidaan luoda yhdellä esittelyllä. (vrt. taulukot ja hashit myöhemmin) tietotyyppi Muuttujan nimi

13 © Lewis & Loftus & Jukka Juslin13 Muuttujan alustus Muuttujien esittelyn yhteydessä muuttujalle voidaan antaa lähtöarvo Kun muuttujaan viitateen ohjelmasta, sen senhetkistä arvoa käytetään int summa = 0; int aloitusarvo = 32, max = 149;

14 © Lewis & Loftus & Jukka Juslin14 Sijoitus sijoitusoperaatio muuttaa muuttujan arvoa Sijoitusoperaattori on = merkki (huomaa epäjohdonmukaisuus matematiikan kanssa, vrt. == myöhemmin) yht = 55; Arvo, joka oli yht muuttujassa ylikirjoitetaan Voit sijoittaa muuttujaan vain sellaisia arvoja, jotka ovat samaa tyyppiä kuin muuttuja Ilmaisu oikealla evaluoidaan ja tulos talletetaan vasemman puolen muuttujaan

15 © Lewis & Loftus & Jukka Juslin15 Vakiot Vakio on tavallinen muuttuja muuten, paitsi että se sisältää saman arvon koko olemassaolonsa ajan Kuten nimi ilmoittaa, kyseessä on vakio ei muuttuja Kääntäjä antaa virheilmoituksen, jos koitat muuttaa vakion arvoa Javassa käytämme final sanaa esitellessämme vakion: final int MIN_HEIGHT = 69;

16 © Lewis & Loftus & Jukka Juslin16 Vakiot Vakiot ovat tärkeitä kolmen syyn takia Ensinnäkin, ne antavat merkityksen muuten “maagisille numeroille”  Esimerkiksi, MAX_LOAD kertoo enemmän kuin vain luvun 250 esiintyminen koodissa Toiseksi, vakiot helpottavat ohjelman ylläpidettävyyttä  Vakion arvo täytyy päivittää vain yhteen kohtaan ohjelmaa, vaikka sitä käytettäisiinkin monesta eri paikasta käsin Kolmanneksi, vakiot formaalisti kertovat että ko. Muuttujan arvo ei saa muuttua: näin vältetään toisten ohjelmoijien tekemiä virheitä – hekin ymmärtävät että ko. Arvo on tarkoitus pitää vakiona

17 © Lewis & Loftus & Jukka Juslin17 Missä ollaan? Merkkijonot Muuttujat ja sijoittaminen Primitiivitietotyypit Ilmaisut Tiedon konvertointi (kastaus) Interaktiiviset ohjelmat

18 © Lewis & Loftus & Jukka Juslin18 Alkeistietotyypit (primitiivityypit) Javassa on kahdeksan primitiivitietotyyppiä Neljä näistä esittää kokonaislukuja:  byte, short, int, long Kaksi näistä esittää desimaalilukuja:  float, double (erottimena. merkki pääsääntöisesti) Yksi esittää merkkejä:  char Ja yksi esittää boolean arvoja (true/false):  boolean

19 © Lewis & Loftus & Jukka Juslin19 Numeerinen primitiivitieto Eri numeeristen pirimitiivityyppien välinen ero on koko ja siksi ne pystyvät tallettamaan erisuuruisia lukuja: Tyyppi byte short int long float double Koko 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits Minimiarvo -128 -32,768 -2,147,483,648 < -9 x 10 18 +/- 3.4 x 10 38 ja 7 desimaalia +/- 1.7 x 10 308 ja 15 desimaalia Maksimiarvo 127 32,767 2,147,483,647 > 9 x 10 18

20 © Lewis & Loftus & Jukka Juslin20 Merkit char muuttujaan talletetaan yksi merkki Merkit esitetään alaspäin osoittavissa hipsuissa (single quotes): 'a' 'X' '7' '$' ',' '\n' Esimerkkejä: char topGrade = 'A'; char terminator = ';', separator = ' '; Huomaa ero primitiivi char-muuttujan, joka tallettaa vain yhden merkin, ja String olion, joka tallettaa useita merkkejä, välillä

21 © Lewis & Loftus & Jukka Juslin21 Merkistöt merkistö on järjestetty lista merkkejä, jossa jokainen merkki vastaa uniikkia numeroa char muuttuja Javassa voi periaatteessa tallettaa minkä tahansa merkin Unicode merkistötä (ko. Merkin näyttäminen ja syöttäminen ei silti ole välttämättä niin helppoa…) Unicode merkistö käyttää kunkin merkin tallentamiseen 16 bittiä, joten kullekin merkille on mahdollista 65,536 erilaista arvoa Unicode on kansainvälinen merkistö, sisältäen symboleja ja merkkejä monista maailman kielistä

22 © Lewis & Loftus & Jukka Juslin22 Merkit ASCII merkistö ion vanhempi ja pienempi kuin Unicode, mutta on silti melko suosittu (ASCII 7-bit vs. ASCII 8-bit) – esim. Windowsissa ASCII merkit ovat osajoukko Unicode merkistöstä, kuten: isot kirjaimet pienet kirjaimet pisteet numerot erikoissymbolit kontrollimerkit A, B, C, … a, b, c, … Piste, puolipiste, … 0, 1, 2, … &, |, \, … car. return, rivinvaihto, tab,...

23 © Lewis & Loftus & Jukka Juslin23 Boolean boolean arvo esittää true tai false tilannetta Varatut sanat true ja false ovat ainoat validit arvot boolean tyypille boolean tehty = false; boolean muuttujaa voidaan myös käyttää esittämään mitä tahansa kahta tilaa: kuten esimerkiksi onko hehkulamppu päällä vai pois päältä

24 © Lewis & Loftus & Jukka Juslin24 Missä ollaan? Merkkijonot Muuttujat ja sijoittaminen Primitiivitietotyypit Ilmaisut Tiedon muuttaminen (kastaus) Interaktiiviset ohjelmat

25 © Lewis & Loftus & Jukka Juslin25 Ilmaisut (laskutoimitukset) ilmaisu koostuu yhdestä tai monista operaattoreista ja operandeista Aritmeettinen ilmaisu laskee numeeriset tulokset ja käyttää hyväkseen aritmeettisia operaattoreita: Jos jompikumpi tai molemmat operandeista ovat desimaalilukuja -> myös tulos on desimaaliluku summa erotus kertolasku jako jakojäännös +-*/%+-*/%

26 © Lewis & Loftus & Jukka Juslin26 Jako ja jakojäännös Jos kummatkin operandit ovat jakolaskussa ovat kokonaislukuja -> tulos on myös kokonaisluku (desimaalit “dropataan pois”, ei pyöristetä) Jakojäännös operaattori (%) palauttaa palauttaa jakojäännöksen koitettuaan laittaa toisen operandin ensimmäiseen operandiin 14 / 3 on 8 / 12 on 4 0 14 % 3 on 8 % 12 on 2 8

27 © Lewis & Loftus & Jukka Juslin27 Operaattorien presedenssi Operaattoreita voidaan yhdistellä monimutkaisemman funktion aikaansaamiseksi: result = total + count / max - offset; Operaattoreilla on presedenssi, mikä määrää missä järjestyksessä laskutoimitus evaluoidaan Kertolasku, jakolasku ja jakojäännös evaluoidaan ennen summaa, erotusta ja Stringien konkatenaatiota Aritmeettiset operaattorit, joilla on sama presedenssi evaluoidaan vasemmalta oikella, mutta sulkeita voidaan käyttää (edelleen kuten matematiikassa) pakottamaan evaluointijärjestys toisin (huom. Älä käytä hakasulkeita tässä yhteydessä)

28 © Lewis & Loftus & Jukka Juslin28 Operaattorien presedenssi Mikä on seuraavien funktioiden evaluointijärjestys? a + b + c + d + e 1432 a + b * c - d / e 3241 a / (b + c) - d % e 2341 a / (b * (c + (d - e))) 4123

29 © Lewis & Loftus & Jukka Juslin29 Funktiopuut Puut ovat ohjelmoijalle tärkeät: hakemistopuut, tietorakenteet yms. Tietyn funktion evaluointi voidaan näyttää puun avulla Operaattoreilla alempana puussa on korkeampi presedenssi ko. Lauseessa. Puun purkaminen aloitettaisiin siis alarivistä a + (b – c) / d a + / -d bc

30 © Lewis & Loftus & Jukka Juslin30 Sijoituslauseet Sijoituslauseella on alempi presedenssi kuin aritmeettisilla operaattoreilla Ensin lause = operaattorin oikealla puolella evaluoidaan Lopuksi tulos talletetaan muuttujaan vasemmalla puolella vast = sum / 4 + MAX * lowest; 1432

31 © Lewis & Loftus & Jukka Juslin31 Sijoituslauseet Sijoituslauseen oikealle ja vasemmalla puolella voi olla sama muuttuja (HUOMAA, sijoituslause on aivan eri asia kuin matematiikan “yhtäsuurikuin” merkki -> Javassa vastaava on ==) Ensin, yksi lisätään luku-muuttujan alkuperäiseen arvoon Lopuksi tulos talletetaan takaisin lukuun (alkuperäinen arvo ylikirjoitetaan) luku = luku + 1;

32 © Lewis & Loftus & Jukka Juslin32 Inkrementointi ja dekrementointi Inkrementointi ja dekrementointi operaattorit käyttävät vain yhtä operandia Inkrementointi operaattori ( ++ ) lisää yhden operandiinsa dekrementointi operaattori ( -- ) vähentää yhden operandistaan Lause luku++; on siis aivan sama kuin (mutta lyhyempi kirjoittaa) luku = luku + 1;

33 © Lewis & Loftus & Jukka Juslin33 Inkrementointi ja dekrementointi Inkrementointi ja dekrementointi operaattoreita voidaan käyttää joko postfix muodossa: count++ tai prefix muodossa: ++count Kun nämä ovat osana laajempaa lausetta, näillä kahdella voi olla erilaiset vaikutukset (postfix suorittaa laskutoimitukset ennen, ennenkuin tekee esim. Inkrementaation, muussa tapauksessa inkrementaatio tehdään heti -> for-silmukka myöhemmin) Koska inkrementointi ja dekrementointi operaattoreilla on omat erikoiset käyttäytymisensä niiden käytössä tulee olla aluksi kohtuullisen varovainen

34 © Lewis & Loftus & Jukka Juslin34 Sijoitusoperaattorit Usein teemme operaation muuttujalle ja sitten talletamme ko. muuttuneen arvon muuttujan vanhan arvon päälle Java tarjoaa sijoitusoperaattorit yksinkertaistamaan tätä prosessia (lyhyempi kirjoittaa…) Esimerkiksi lause num += count; on sama kuin num = num + count;

35 © Lewis & Loftus & Jukka Juslin35 Sijoitusoperaattorit Javassa on monia sijoitusoperaattoreita, mukaanlukien seuraavat: Operaattori += -= *= /= %= Esimerkki x += y x -= y x *= y x /= y x %= y On sama kuin x = x + y x = x - y x = x * y x = x / y x = x % y

36 © Lewis & Loftus & Jukka Juslin36 Sijoitusoperaattorit Sijoitusoperaattorin oikea puoli voi olla monimutkainen lause Oikean puolen lause kokonaisudessaan evaluoidaan ensin, sitten tulos yhdistetään alkuperäiseen muuttujaan Siksi result /= (total-MIN) % num; on sama kuin result = result / ((total-MIN) % num);

37 © Lewis & Loftus & Jukka Juslin37 Sijoitusoperaattorit Joiden sijoitusoperaattoreiden käyttäytyminen riippuu operandien tyypistä Jos += operaattorit operandit ovat Stringejä, sijoitusoperaatio suorittaa Stringien konkatenaation Sijoitusoperaation käyttäytyminen ( += ) on aina konsistentti sitä vastaavaan operaattorin kanssa ( + )

38 © Lewis & Loftus & Jukka Juslin38 Missä ollaan? Merkkijonot Muuttujat ja sijoittaminen Primitiivitietotyypit Ilmaisut Tiedon konvertointi (kastaus) Interaktiiviset ohjelmat

39 © Lewis & Loftus & Jukka Juslin39 Tiedon muuntaminen Joskus on tarpeen muuntaa tietoa tyypistä toiseen Esimerkiksi, tietyssä tilanteessa voimme haluta käsitellä kokonaislukua (integer) desimaalilukuna (floating point) Nämä konversiot eivät muuta muuttujan tyyppiä tai siinä pidettyä arvoa – ne ainoastaan muuntavat arvon osana laskutoimitusta

40 © Lewis & Loftus & Jukka Juslin40 Tiedon konversio Konversiotilanteissa pitää olla varovainen, jotta vältyttäisiin tiedon hukkaamiselta Avartavia konversiot ovat turvallisia, sillä niissä tarkennetaan pienen tietotyypin esitystä suuremmaksi (kuten short :sta int :iin ) Kaventavissa konversioissa voidaan hukata informaatiota, sillä niissä mennään suuremmasta tietotyypistä pienempään (kuten int :stä short :iin ) Javassa konversiot voivat tapahtua jollakin seuraavasta kolmesta tavasta:  sijoituksen tyyppimuunnos  promootio  kastaus (tyyppimuunnos)

41 © Lewis & Loftus & Jukka Juslin41 Sijoituksen tyyppimuunnos Sijoituksen tyyppimuunnos tapahtuu kun yhden tyyppienn muuttuja sijoitetaan toisentyyppiseen muuttujaan Jos money on float muuttuja ja dollars on int muuttuja, seuraava sijoituslause muuntaa dollars muuttujassa olevan arvon float :ksi. money = dollars Vain avartavia muunnoksia voi tapahtua sijoituksessa Huomaa, että dollars muuttujassa olevan arvon tyyppi ei muuttunut

42 © Lewis & Loftus & Jukka Juslin42 Tiedon muuntaminen Promootio tapahtuu automaattisesti, kun operaattorit muuntavat operandinsa Esimerkiksi, jos sum on float ja count on int, count :n arvo muutetaan automaattisesti desimaaliluvuksi (float), jotta seuraava laskutoimitus voidaan suorittaa: result = sum / count;

43 © Lewis & Loftus & Jukka Juslin43 Kastaus (casting, eli tyyppimuunnos) Kastaus on voimakkain, ja vaarallisiin muunnoskeino Sekä laajentavia että supistavia tyyppimuunnoksia voisaan tehdä kastauksen avulla Kastaus tapahtuu laittamalla haluttu tyyppi sulkeisiin muutettavaksi halutun arvon eteen Esimerkiksi, jos total ja count ovat kokonaislukuja, mutta haluamme vastauksen desimaalilukuna, voimme kastata total muuttujan : result = (float) total / count;

44 © Lewis & Loftus & Jukka Juslin44 Missä ollaan? Merkkijonot Muuttujat ja sijoittaminen Primitiivitietotyypit Ilmaisut Tiedon muuttaminen (kastaus) Interaktiiviset ohjelmat

45 © Lewis & Loftus & Jukka Juslin45 Interaktiivinen ohjelma Ohjelmat tarvitsevat syötettä (inputtia), jonka perusteella toimia Scanner luokka tarjoaa helppokäyttöiset metodit lukea erityyppisiä syötteitä (numeroita tai tekstiä yms.) Scanner olio voidaan asettaa lukemaan syötettä useista lähteistä, mukaanlukien käyttäjän mahdollisuus syöttää tietoa näppäimistöltä Näppäimistön syöte esitetään System.in olion avulla

46 © Lewis & Loftus & Jukka Juslin46 Syötteen lukeminen Seuraava rivi luo Scanner olion, joka ottaa syötettä vastaan näppäimistöltä: Scanner scan = new Scanner (System.in); new operaattori luo Scanner olion Kun luotu, Scanner oliota voidaan käyttää kutsumaan erityyppisiä input metodeita, kuten: vastausStringi = scan.nextLine();

47 © Lewis & Loftus & Jukka Juslin47 Syötteen lukeminen Scanner luokka on osa java.util luokkakirjastoa, ja ko. Luokka pitää importata ohjelmaan, jotta sitä voidaan käyttää  import java.util.Scanner; nextLine metodi lukee kaiken syötteen, kunnes rivinvaihto havaitaan Olion luomisen ja luokkakirjastojen yksityiskohtia valotetaan luvussa

48 © Lewis & Loftus & Jukka Juslin48 Sanasyöte (tokens) Jollei muuten ilmoiteta, tyhjä tila ymmärretään sanojen, elementtien (tokenien) erottimena. Huomaa, että Java ei voi ymmärtää käsitettä sana, se näkee vain erilaisia merkkijonoja Tyhjä tila voi olla välilyönte(jä), tabeja tai rivinvaihtoja next metodi Scanner luokassa lukee lukee seuravaavan input tokenin ja palauttaa sen Stringinä Metodit kuten nextInt ja nextDouble lukevat ko. Tyypin mukaista tietoa (ja palauttavat ko. Tyypin mukaista tietoa)

49 © Lewis & Loftus & Jukka Juslin49 Missä ollaan? Merkkijonot Muuttujat ja sijoittaminen Primitiivitietotyypit Ilmaisut Tiedon muuttaminen (kastaus) Interaktiiviset ohjelmat

50 © Lewis & Loftus & Jukka Juslin50 Yhteenveto Luvussa kaksi keskityimme seuraaviin:  Merkkijonot  Primitiivitietotyypit  Muuttujien esittely ja käyttö  Lauseet ja operaattoreiden presedenssi  Tiedon konversiot  Syötteen vastaanottaminen käyttäjältä


Lataa ppt "© Lewis & Loftus & Jukka Juslin1 Tietotyypit ja lausekkeet."

Samankaltaiset esitykset


Iklan oleh Google