Tietotyypit ja lausekkeet. Lewis & Loftus & Jukka Juslin 1



Samankaltaiset tiedostot
Java-kielen perusteet

Java-kielen perusteet

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

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

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

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

Java-kielen perusteita

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

7. Näytölle tulostaminen 7.1

Taulukot. Jukka Harju, Jukka Juslin

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Tietotyypit ja operaattorit

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

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

Java-kielen perusteita

Java-kielen perusteet

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

Ehto- ja toistolauseet

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

6. Muuttujat ja Java 6.1

Metodien tekeminen Javalla

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Java-kielen perusteet

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

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

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

Javan perusteita. Janne Käki

Python-ohjelmointi Harjoitus 2

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

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

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

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

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

Muuttujat ja kontrolli. Ville Sundberg

Ohjelmointiharjoituksia Arduino-ympäristössä

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

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

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

17. Javan omat luokat 17.1

Ehto- ja toistolauseet

20. Javan omat luokat 20.1

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Standardi- ja tietorakenneluokkia

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

13. Loogiset operaatiot 13.1

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

6. Muuttujat ja Java 6.1

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

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

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

Ohjelmointi 1 Taulukot ja merkkijonot

Ohjelmoinnin perusteet Y Python

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

17. Javan omat luokat 17.1

1. Omat operaatiot 1.1

Java-kielen perusteita

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

Ohjelmoinnin perusteet Y Python

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)


OSA II Kieli. Oppitunti. 4. Rakennuslohkot 5. Ohjelman kulku 6. Funktiot 7. Taulukot 8. Oliot

Ohjelmoinnin perusteet Y Python

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

7/20: Paketti kasassa ensimmäistä kertaa

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Ohjelmoinnin peruskurssi Y1

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

etunimi, sukunimi ja opiskelijanumero ja näillä

Osio2: Taulukot Jukka Juslin

Olio-ohjelmointi Javalla

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Ohjelmoinnin peruskurssi Y1

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

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

Osoitin ja viittaus C++:ssa

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

Johdatus Ohjelmointiin

Harjoitus 2 (viikko 45)

16. Ohjelmoinnin tekniikkaa 16.1

14. Hyvä ohjelmointitapa 14.1

Ohjelmoinnin jatkokurssi, kurssikoe

Java kahdessa tunnissa. Jyry Suvilehto

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

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

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

13 Operaattoreiden ylimäärittelyjä

3. Muuttujat ja operaatiot 3.1

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

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

16. Ohjelmoinnin tekniikkaa 16.1

Rajapinta (interface)

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

Transkriptio:

Tietotyypit ja lausekkeet Lewis & Loftus & Jukka Juslin 1

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ä Lewis & Loftus & Jukka Juslin 2

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

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 Lewis & Loftus & Jukka Juslin 4

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 nimi informaatio metodille (parametrit), tässä tapauksessa String Lewis & Loftus & Jukka Juslin 5

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) Lewis & Loftus & Jukka Juslin 6

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 Lewis & Loftus & Jukka Juslin 7

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) Lewis & Loftus & Jukka Juslin 8

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."); Lewis & Loftus & Jukka Juslin 9

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 Lewis & Loftus & Jukka Juslin 10

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

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 tietotyyppi Muuttujan nimi int summa; int laskuri, temp, tulos; Useita muuttujia voidaan luoda yhdellä esittelyllä. (vrt. taulukot ja hashit myöhemmin) Lewis & Loftus & Jukka Juslin 12

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

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

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; Lewis & Loftus & Jukka Juslin 15

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 Lewis & Loftus & Jukka Juslin 16

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

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 Lewis & Loftus & Jukka Juslin 18

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

Merkit char muuttujaan talletetaan yksi merkki Merkit esitetään alaspäin osoittavissa hipsuissa (single quotes): Esimerkkejä: 'a' 'X' '7' '$' ',' '\n' 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ä Lewis & Loftus & Jukka Juslin 20

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ä Lewis & Loftus & Jukka Juslin 21

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 A, B, C, pienet kirjaimet a, b, c, pisteet Piste, puolipiste, numerot 0, 1, 2, erikoissymbolit &,, \, kontrollimerkit car. return, rivinvaihto, tab,... Lewis & Loftus & Jukka Juslin 22

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ä Lewis & Loftus & Jukka Juslin 23

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

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

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

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ä) Lewis & Loftus & Jukka Juslin 27

Operaattorien presedenssi Mikä on seuraavien funktioiden evaluointijärjestys? a + b + c + d + e 1 2 3 4 a + b * c - d / e 3 1 4 2 a / (b + c) - d % e 2 1 4 3 a / (b * (c + (d - e))) 4 3 2 1 Lewis & Loftus & Jukka Juslin 28

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 b c Lewis & Loftus & Jukka Juslin 29

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

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 luku = luku + 1; Lopuksi tulos talletetaan takaisin lukuun (alkuperäinen arvo ylikirjoitetaan) Lewis & Loftus & Jukka Juslin 31

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; Lewis & Loftus & Jukka Juslin 32

Inkrementointi ja dekrementointi Inkrementointi ja dekrementointi operaattoreita voidaan käyttää joko postfix muodossa: tai prefix muodossa: count++ ++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 Lewis & Loftus & Jukka Juslin 33

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 on sama kuin num += count; num = num + count; Lewis & Loftus & Jukka Juslin 34

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 Lewis & Loftus & Jukka Juslin 35

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); Lewis & Loftus & Jukka Juslin 36

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 (+) Lewis & Loftus & Jukka Juslin 37

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

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 Lewis & Loftus & Jukka Juslin 39

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) Lewis & Loftus & Jukka Juslin 40

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 Lewis & Loftus & Jukka Juslin 41

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; Lewis & Loftus & Jukka Juslin 42

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; Lewis & Loftus & Jukka Juslin 43

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

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 Lewis & Loftus & Jukka Juslin 45

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(); Lewis & Loftus & Jukka Juslin 46

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 Lewis & Loftus & Jukka Juslin 47

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) Lewis & Loftus & Jukka Juslin 48

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

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ä Lewis & Loftus & Jukka Juslin 50