Taulukot, silmukat ja muut joka koodin pikku veijarit



Samankaltaiset tiedostot
Taulukot. Jukka Harju, Jukka Juslin

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

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

Java kahdessa tunnissa. Jyry Suvilehto

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

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

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

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

Javan perusteita. Janne Käki

Muuttujat ja kontrolli. Ville Sundberg

Java-kielen perusteet

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

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

Java-kielen perusteet

Taulukot. Taulukon käsittely. Tämän osan sisältö. Esimerkki. Taulukon esittely ja luonti. Taulukon alustaminen. Taulukon koko

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

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

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

Taulukoiden käsittely Javalla

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

ITKP102 Ohjelmointi 1 (6 op)

Java-kielen perusteet

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1

20. Javan omat luokat 20.1

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

17. Javan omat luokat 17.1

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

17. Javan omat luokat 17.1

Olio-ohjelmointi Javalla

11. Javan toistorakenteet 11.1

ITKP102 Ohjelmointi 1 (6 op)

Luentomateriaali. Informaatioverkostot: Studio 1. Janne Käki MUUTTUJAT SWING POLYMORFISMI UML-KAAVIOT SOVELMAT SILMUKAT POIKKEUKSET JAVADOC

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

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

Sisällys. 15. Lohkot. Lohkot. Lohkot

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

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

7/20: Paketti kasassa ensimmäistä kertaa

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

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Java-API, rajapinnat, poikkeukset, UML,...

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

6. Muuttujat ja Java 6.1

13. Loogiset operaatiot 13.1

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

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

6. Muuttujat ja Java 6.1

Osio2: Taulukot Jukka Juslin

Ohjelmointi 1 Taulukot ja merkkijonot

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

Metodien tekeminen Javalla

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Mikä yhteyssuhde on?

Ohjelmointiharjoituksia Arduino-ympäristössä

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

14. Poikkeukset 14.1

15. Ohjelmoinnin tekniikkaa 15.1

16. Javan omat luokat 16.1

7. Näytölle tulostaminen 7.1

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

19. Olio-ohjelmointia Javalla 19.1

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

Java-kielen perusteita

14. Poikkeukset 14.1

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

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Luokan muodostimet (Constructors)

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

Olio-ohjelmointi Syntaksikokoelma

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

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

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmointi 1: Olipa kerran olio

Listarakenne (ArrayList-luokka)

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

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

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

5.6. C-kielen perusteet, osa 6/8, Taulukko , pva, kuvat jma

13 Operaattoreiden ylimäärittelyjä

Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Ta

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

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

7. Oliot ja viitteet 7.1

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Apuja ohjelmointiin» Yleisiä virheitä

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Java-kielen perusteita

18. Abstraktit tietotyypit 18.1

Ohjelmointi 2 / 2010 Välikoe / 26.3

13. Loogiset operaatiot 13.1

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Oliot viestivät metodeja kutsuen

Ohjelmoinnin perusteet Y Python

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

1. Omat operaatiot 1.1

Transkriptio:

Taulukot, silmukat ja muut joka koodin pikku veijarit Janne Käki 7.9.6

MERKKI liikenne jono METRI para laku MOGARI ATRI psyki buutti ESINE pelottelu ellistäminen runsauden kuono TUNTI SARVI kusi assistentti

Klassinen for-lause for (int i = ; i < ; i++) {... ei alustuslauseke onko ehto tosi? kyllä suoritettavat lauseet for-lauseen jälkeinen elämä kasvatuslauseke

Tällainen for-lause... for (int i = ; i < ; i++) {......vastaa while-lauseella toteutettua rakennetta { int i = ; while (i < ) {... i++; Mikä merkitys on ulommilla aaltosuluilla?

Iteroiva for-lause public void tulostanimet(set<olento> olennot) { for (Olento o : olennot) { System.out.println(o.annaNimi()); Käy läpi kaikki tiettyyn kokoelmaan sisältyvät oliot. Kukin kokoelman olio sijoitetaan siis vuorollaan for-lauseen määrittelemään muuttujaan ja siihen sovelletaan aaltosulkujen sisällä olevia lauseita. Läpikäyntijärjestys riippuu kokoelmasta. Listoilla se on määrätty, joukoilla (Set) yleensä määrittelemätön, mutta ei kuitenkaan aidosti satunnainen. Kokoelman sisältöä ei saa muuttaa (lisätä tai poistaa olioita) kesken iteroinnin, muuten seuraa virhe nimeltä ConcurrentModificationException.

public void tulostanimet(set<olento> olennot) { String nimet = ; for (Olento o : olennot) { nimet += o.annanimi() +, ; System.out.println(nimet); Tulostaa: Arska, Pena, Mats, Rauski, Miten pääsemme eroon ylimääräisestä pilkusta? public void tulostanimet(set<olento> olennot) { String nimet = ; int otuslaskuri = ; for (Olento o : olennot) { nimet += o.annanimi(); if (otuslaskuri < olennot.size()-) { nimet +=, ; otuslaskuri++; System.out.println(nimet);

Muuttujista Muuttujan määrittely (eli esittely): nimetään tietolokero ja kerrotaan, minkä tyyppistä tietoa se voi sisältää. String brutaalisolvaus; int vihreidenpingviinienlukumaara; Muuttujan alustus: sijoitetaan muuttujaan (sen historian ensimmäinen) arvo. brutaalisolvaus = hähä mogari ; Voidaan tehdä myös suoraan määrittelyn yhteydessä: String brutaalimpisolvaus = luetaan sitä API:a ; Muuttujan arvon lukeminen: käytetään muuttujaa missä tahansa muualla kuin sijoituslauseen vasemmalla puolella. System.out.println(brutaalimpiSolvaus); if (vihreidenpingviinienlukumaara > ) { Ei saa tehdä alustamattomalle muuttujalle, muuten kääntäjää alkaa pelottaa. ( Variable might not have been initialized. ) Attribuuteilla on aina tietty alkuarvo automaattisesti (numeromuuttujilla nolla, booleaneilla false, oliomuuttujilla null), joten niiden alustaminen ei ole välttämätöntä ennen muuttujan käyttämistä yleensä toki suositeltavaa.

Tietotyypeistä byte alkeistyypit kokonaisluku desimaaliluku (liukuluku) short int long float double totuusarvo boolean merkki char viittaustyypit merkkijono alkeistyyppien kääreet taulukot muut oliotyypit String Integer, Double, Boolean, Character,... int[ ], double[ ], Object[ ], Karttaruutu[ ][ ],... Object, Random, HashSet, Pelotteluesine,... olioita

Viittaustyyppiset muuttujat Olio on kuin ilmapallo. Oliomuuttujat ovat viittauksia kuin naruja, joiden päässä se ilmapallo on. Sama olioilmapallo voi olla useamman narun päässä. Siihen voidaan vaikuttaa (eli sen metodeita kutsua) kaikkia naruja pitkin, ja kaikki kutsut muokkaavat yhtä ja samaa oliota. Kun oliomuuttuja lakkaa olemasta tai saa uuden arvon, yksi naru katkeaa. Kun olio ei ole enää yhdenkään narun päässä kiinni, se karkaa stratosfääriin (eli Javan automaattinen roskienkerääjä tulee ja syö sen).

Taulukko Taulukkomuuttujan määrittely ja alustaminen ns. taulukon alustajalla: int[] taulu = { 9,,, 7,,, ; 9 7 5 6 Taulukon indeksointi ja sen alkioiden arvojen asettaminen: taulu[] = ; taulu[] = ; taulu[taulu.length-] = 8; 7 5 6 8 Uuden, tyhjän taulukon luonti new-operaattorilla: taulu = new int[5]; Taulukotkin ovat olioita. Huomaa, että taulukon koko on taulukko-olion, ei taulukkomuuttujan ominaisuus. (Samaan muuttujaan voi sijoittaa minkä kokoisen taulukon tahansa.) Taulukon tietotyyppi on sen sijaan myös taulukkomuuttujan ominaisuus.

Laskurilla varustettu for-silmukka on kuin luotu taulukon läpikäymiseen, esimerkiksi seuraavassa fiktiivisessä Olento-luokan metodissa: public void kauhistuhirviolaumaa(olento[] hirviot) { for (int i = ; i < hirviot.length; i++) { hirviot[i].pelottele(this); Muista, että taulukon indeksit alkavat nollasta ja päättyvät yhtä pienempään kuin taulukon koko. hirviot[i] viittaa vuorollaan aina yhteen taulukon alkioon, siis Olento-tyyppiseen olioon (ellei kyseinen alkio ole null). this viittaa aina siihen olioon, jonka metodista on kyse. Sitä voi käyttää myös sellaisenaan, esimerkiksi parametrina jollekin toiselle metodille.

Jos määrittelemme seuraavasti int[] taulua; int[] taulub = null; int[] tauluc = new int[5]; Pelotteluesine[] taulud = new Pelotteluesine[]; ja sen jälkeen yritämme seuraavia asioita, mikään niistä ei onnistu. Miksi? taulua[] = 9; taulub[] = 88; tauluc[5] = ; tauluc[] =.86; taulua = new double[]; taulub = taulua; taulud[666].annapelottavuus(); Variable taulua might not have been initialized. java.lang.nullpointerexception java.lang.arrayindexoutofboundsexception Possible loss of precision. Found: double. Required: int. Incompatible types. Found: double[ ]. Required: int[ ]. Variable taulua might not have been initialized. java.lang.nullpointerexception Inspired by: http://www.cs.helsinki.fi/u/wikla/ohjelmointi/sisalto//taulukot.html#

Kaksiulotteinen taulukko eli taulukoita taulukossa Luodaan D-taulukko eli matriisi, jossa on neljä riviä ja viisi saraketta: Olento[][] otusruudukko = new Olento[][5]; Itse asiassa loimme yhden nelipaikkaisen taulukon, jonka alkioiden tietotyyppi on Olento[]. Se sisältää siis neljä yksiulotteista, viisipaikkaista olentotaulukkoa. Nämä taulukot ovat aluksi tyhjiä, eli niiden jokainen alkio on null. Voimme sijoittaa ruudukkoon uusia arvoja kertomalla, mihin alitaulukkoon ja mihin lokeroon siellä kyseinen arvo sijoitetaan: otusruudukko[][] = new Olento( Rauski, );

D-taulukon rivien ei välttämättä tarvitse olla samanpituisia jokainen alitaulukkohan on yksilöllinen olio, jonka pituus voi olla mitä vain: Olento[][] otusruudukko = new Olento[][]; Huomaa tyhjät jälkimmäiset hakasulut. Tässä luotiin tyhjä nelipaikkainen taulukko, johon voi sijoittaa Olento[]-taulukoita. Näitä alitaulukkoja ei kuitenkaan vielä ole olemassa, ne on luotava nyt erikseen. otusruudukko[] = new Olento[5]; otusruudukko[] = new Olento[]; otusruudukko[] = new Olento[]; otusruudukko[] = new Olento[]; otusruudukko[][] = new Olento( Rauski, );

for-lauseita voi käyttää myös sisäkkäin. Kaksiulotteisen taulukon läpikäynnissä tämä on usein välttämätöntä: String[][] ruudut = new String[5][5]; for (int i = ; i < ruudut.length; i++) { for (int j = ; j < ruudut[i].length; j++) { ruudut[i][j] = i +, + j;,,,,,,,,,,,,,,,,,,,,,,,,,