Taulukot. Jukka Harju, Jukka Juslin 2006 1



Samankaltaiset tiedostot
Osio2: Taulukot Jukka Juslin

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

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

Java-kielen perusteet

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

Java-kielen perusteet

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

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

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

Java-kielen perusteet

Metodien tekeminen Javalla

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

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

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

Olio-ohjelmointi Javalla

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

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

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

Mikä yhteyssuhde on?

Listarakenne (ArrayList-luokka)

Javan perusteita. Janne Käki

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

20. Javan omat luokat 20.1

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

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

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

Osoitin ja viittaus C++:ssa

Ohjelmoinnin jatkokurssi, kurssikoe

1. Omat operaatiot 1.1

17. Javan omat luokat 17.1

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

17. Javan omat luokat 17.1

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

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

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

Java-kielen perusteita

Taulukot, silmukat ja muut joka koodin pikku veijarit

Ohjelmointi 1 Taulukot ja merkkijonot

Tietueet. Tietueiden määrittely

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

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

Luokan muodostimet (Constructors)

7. Näytölle tulostaminen 7.1

15. Ohjelmoinnin tekniikkaa 15.1

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

ITKP102 Ohjelmointi 1 (6 op)

7/20: Paketti kasassa ensimmäistä kertaa

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet

ITKP102 Ohjelmointi 1 (6 op)

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Taulukoiden käsittely Javalla

9. Periytyminen Javassa 9.1

Java kahdessa tunnissa. Jyry Suvilehto

9. Periytyminen Javassa 9.1

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

Ohjelmoinnin perusteet Y Python

1 Tehtävän kuvaus ja analysointi

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

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

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

15. Ohjelmoinnin tekniikkaa 15.1

Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia?

19. Olio-ohjelmointia Javalla 19.1

Rajapinta (interface)

Mallit standardi mallikirjasto parametroitu tyyppi

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Olio-ohjelmointi Syntaksikokoelma

12. Monimuotoisuus 12.1

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

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

7. Oliot ja viitteet 7.1

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

Muuttujat ja kontrolli. Ville Sundberg

Java-kielen perusteita

Metodien tekeminen Javalla

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin perusteet Y Python

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Oliot viestivät metodeja kutsuen

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

Oliosuunnittelu ja luokkakohtaiset komponentit

Osio2, olio-ohjelmointi: Luokkien ja olioiden käyttäminen Jukka Juslin

Periytyminen (inheritance)

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

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

12 Mallit (Templates)

14. Poikkeukset 14.1

18. Abstraktit tietotyypit 18.1

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

Harjoitus 4 (viikko 47)

14. Poikkeukset 14.1

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

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

Transkriptio:

Taulukot Jukka Harju, Jukka Juslin 2006 1

Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti Taulukot, jotka tallettavat olioviittauksia Vaihtuvamittaiset parametrilistat Jukka Harju, Jukka Juslin 2006 2

Missä ollaan? Taulukoiden luonti ja käyttö Oliotaulukot Vaihtelevan pituiset parametrilistat Jukka Harju, Jukka Juslin 2006 3

Taulukko Taulukko on järjestetty lista arvoja Taulukolla on nimi (viittausmuuttujan nimi) Jokaisella arvolla on numeerinen indeksi 0 1 2 3 4 5 6 7 8 9 pisteet 15 87 94 82 67 98 87 81 74 91 Taulukko, jonka koko on N-solua indeksoidaan nollasta indeksiin N-1 asti. Yo taulukko sisältää 10 solua, jotka on indeksoitu 0:sta 9:ään Jukka Harju, Jukka Juslin 2006 4

Taulukot Tiettyyn arvoon taulukossa viitataan käyttämällä taulukon nimeä, jota seuraa indeksin numero hakasulkeissa. Esimerkiksi: pisteet[2] viittaa arvoon 94 (kolmas arvo taulukossa). Indeksi viittaa soluun, johon tallennetaan esimerkin taulukossa yksi int-tyyppinen arvo Jukka Harju, Jukka Juslin 2006 5

Taulukot Taulukon soluun voidaan tallentaa arvo, solun sisältö voidaan tulostaa tai solua voidaan käyttää laskutoimituksessa: pisteet[2] = 89; pisteet[eka] = pisteet[eka] + 2; keskiarvo = (pisteet[0] + pisteet[1])/2; System.out.println ( Huippu = " + pisteet[5]); Jukka Harju, Jukka Juslin 2006 6

Taulukot Taulukon kaikkien solujen tietotyyppi on sama. Solun tyyppi voi olla primitiivityyppi tai viittausmuuttuja. Taulukko voidaan luoda sisältämään esimerkiksi inttyyppistä tietoa, merkkejä, merkkijonoja (viittauksia String -luokan olioihin), viittauksia Kolikko luokan olioihin yms. Javassa taulukko itse on olio. Jukka Harju, Jukka Juslin 2006 7

Taulukon luonti pisteet-taulukko voidaan luoda seuraavasti: int[] pisteet = new int[10]; Muuttujan pisteet tyyppi on int[] (solun tyyppi on int, []-merkit kertovat kyseessä olevan taulukon). Huomaa, että taulukon tyyppi ei määrää taulukon kokoa, vaan jokaiselle taulukko-oliolle annetaan oma koko. Viittausmuuttuja pisteet asetetaan osoittamaan uuteen taulukko-olioon, joka pystyy säilyttämään 10 int-tyyppistä tietoa. Jukka Harju, Jukka Juslin 2006 8

Taulukkojen luonti Muutamia muita esimerkkejä taulukon luonnista: float[] hinnat = new float[500]; boolean[] vivut; vivut = new boolean[20]; char[] merkit = new char[1750]; Jukka Harju, Jukka Juslin 2006 9

Taulukkojen käyttö Java SE 5:n Iterator-luokka helpottaa taulukon elementtien läpikäyntiä: for (int piste : pisteet) { System.out.println (piste); } Enimmäkseen käytetään kuitenkin for-toistorakennetta taulukon läpikäyntiin: for (int i=0; i<pisteet.length; i++) { System.out.println(pisteet[i]); } Jukka Harju, Jukka Juslin 2006 10

Taulukon rajojen tarkistaminen Kun taulukko on luotu, sillä on kiinnitetty koko, jota ei voida enää muuttaa. Indeksin, jolla viitataan taulukon soluun, täytyy olla taulukon rajojen sisällä. Toisin sanoen indeksin arvon pitää olla >= 0 ja <N (taulukon koko). Java kääntäjä heittää ArrayIndexOutOfBoundsExceptionluokan poikkeuksen, jos taulukon indeksin on rajojen ulkopuolella. Tätä kutsutaan automaattiseksi rajojen tarkistamiseksi. Jukka Harju, Jukka Juslin 2006 11

Rajojen tarkistus Esimerkiksi taulukon merkit koko on 100, mutta indeksi laskuri saa liikkua vain välillä 0-99. Jos laskurin arvo on 100, silloin seuraava viittaus aiheuttaa poikkeuksen heittämisen: System.out.println(merkit[laskuri]); On tyypillistä tehdä ns. off-by-one virheitä taulukkoja käytettäessä. ongelma for (int i=0; i <= 100; i++) { merkit[i] = i*50 + epsilon; } Jukka Harju, Jukka Juslin 2006 12

Rajojen tarkistus Jokaisella taulukko-oliolla on julkinen vakioattribuutti nimeltään length, joka sisältää taulukon koon. Tähän viitataan taulukon nimen kautta käyttäen length-attribuuttia, ei esim. getlength-metodia: int pituus = pisteet.length; Huomaa, että length sisältää solujen lukumäärän eikä suurinta sallittua indeksinumeroa. Jukka Harju, Jukka Juslin 2006 13

Toinen taulukon luontitapa Hakasulkeet taulukon tyypissä voidaan kirjoittaa taulukon tietotyypin tai nimen jälkeen. Seuraavat kaksi lausetta ovat merkitykseltään identtiset: float[] hinnat; float hinnat[]; Ensimmäinen tapa on helpommin luettava ja suositeltava. Jukka Harju, Jukka Juslin 2006 14

Alustuslistat Alustuslistaa voidaan käyttää arvojen sijoittamisessa taulukkoon sen luontivaiheessa. Arvot kirjoitetaan aaltosulkeisiin pilkulla erotettuina. Esimerkkejä: int[] yksikot = {147, 323, 89, 933, 540, 269, 97, 114, 298, 476}; char[] arvosanat = {'1', '2', '3', '4', '5'}; Jukka Harju, Jukka Juslin 2006 15

Alustuslistat Huomaa, että kun käytetään alustuslistaa: Ei käytetä new-operaattoria Taulukon kokoa ei määritellä Taulukon koko määrittyy automaattisesti sen mukaan kuinka monta arvoa alustuslistassa on. Alustuslistaa voidaan käyttää vain taulukon luonnin yhteydessä. Jukka Harju, Jukka Juslin 2006 16

Taulukko parametrina Koko taulukko voidaan välittää parametrina metodille. Kuten mikä tahansa muun olion kanssa, viittaus taulukkoon (eli olioon) välitetään metodille. Kun taulukkoa muutetaan metodin sisällä näkyvät muutokset myös kutsuneeseen metodiin. Taulukkoa ei siis ole tarpeen palauttaa metodista. Myös yksittäinen taulukon solu voidaan välittää metodille, kunhan solun tyyppi vastaa metodin parametrimuuttujan tyyppiä. Jukka Harju, Jukka Juslin 2006 17

Missä ollaan? Taulukoiden luonti ja käyttö Oliotaulukot Vaihtelevan pituiset parametrilistat Jukka Harju, Jukka Juslin 2006 18

Oliotaulukot Taulukon elementit voivat olla viittausmuuttujia. Seuraava lause varaa tilaa viidelle viittausmuuttujalle, jotka viittaavat String-luokan olioihin: String[] sanat = new String[5]; Yo lause ei luo String olioita. Taulukko sisältää null alkuarvoja. Olio, joka tallennetaan taulukkoon täytyy erikseen luoda. Jukka Harju, Jukka Juslin 2006 19

Oliotaulukko sanat-taulukko alkuarvoisessa tilanteessa: sanat null null null null null Seuraava käyttöyritys heittäisi NullPointerException:in: System.out.println (sanat[0]); Jukka Harju, Jukka Juslin 2006 20

Oliotaulukot Sen jälkeen kun muutamia String-olioita on luotu ja tallennettu taulukkoon: sanat null null "hauskuus" "luonti" "nopeus" Jukka Harju, Jukka Juslin 2006 21

Oliotaulukot String-olioita voidaan luoda käyttäen vakiomerkkijonoja. Seuraava lause luo taulukko-olion, jonka nimi on verbit ja täyttää sen neljällä String-oliolla. String[] verbit = {"leiki", "työskentele", "syö", "nuku"}; Jukka Harju, Jukka Juslin 2006 22

Komentoriviargumentit main-metodin määrittelystä havaitaan, että metodi saa parametrina String-tyyppisen taulukon. Taulukon arvot ovat peräisin komentoriviargumenteista, jotka annetaan ohjelmalle käynnistyksen yhteydessä. Esimerkiksi seuraava komento välittää kaksi String - oliota main-metodille: > java ohjelma uskomaton kiva Nämä merkkijonot tallennetaan indeksien 0-1 paikalle main-metodin parametritaulukkoon. Jukka Harju, Jukka Juslin 2006 23

Missä ollaan? Taulukoiden luonti ja käyttö Oliotaulukot Vaihtelevan pituiset parametrilistat Jukka Harju, Jukka Juslin 2006 24

Vaihtelevan mittaiset parametrilistat Olettaen, että halutaan tehdä metodi, joka käsittelee vaihtelevan mittaisen määrän parametreja kutsun mukaan. Esimerkki: Halutaan luoda metodi keskiarvo, joka palauttaa intparametrien keskiarvon. // 1. metodikutsu (neljä lukua) keskiarvo1 = keskiarvo(3, 5, 1, 2); // 2. metodikutsu (kolme lukua) keskiarvo2 = keskiarvo(3, 5, 1); Jukka Harju, Jukka Juslin 2006 25

Vaihtelevan mittaiset parametrilistat keskiarvo-metodi voitaisiin ylikuormittaa. Huono puoli: tarvitsisimme erikseen eri version metodista jokaiselle parametrilistan sallitulle pituudelle. Voitaisiin määrittää metodi, joka saa parametrina inttyyppisen taulukon. Huono puoli: taulukko täytyisi luoda ja tallentaa muuttujat taulukkoon, ennen metodin kutsumista Java SE 5 tarjoaa kätevän tavan luoda muuttuvan pituisia parametrilistoja. Jukka Harju, Jukka Juslin 2006 26

Vaihtelevan mittaiset parametrilistat Käyttäen parametrien määrittelyssä seuraavaa syntaksia, voidaan metodi määritellä vastaanottamaan mikä tahansa määrä samantyyppisiä parametreja. Jokaisella kutsulla, parametrit sijoitetaan automaattisesti taulukkoon, jotta ne pystytään helposti prosessoimaan. Ilmoittaa että kyseessä on vaihtelevan pituinen lista public double keskiarvo(int... lista) { // toiminnot } solun tyyppi taulukon nimi Jukka Harju, Jukka Juslin 2006 27

Vaihtelevan mittaiset parametrilistat public double keskiarvo(int... lista) { double tulos = 0.0; if (lista.length!= 0) { int summa = 0; for (int numero : lista) summa += numero; tulos = (double) summa / lista.length; } } return tulos; Jukka Harju, Jukka Juslin 2006 28

Vaihtelevan mittaiset parametrilistat Parametrin tyyppi voi olla mikä tahansa primitiivityyppi tai viittausmuuttuja. public void tulosta arvosanat (Arvosana... arvosanat) { for (Arvosana numero : arvosanat) { System.out.println(numero); } } Jukka Harju, Jukka Juslin 2006 29

Vaihtelevan mittaiset parametrilistat Metodi, joka ottaa vastaan vaihtelevan määrän parametreja, voi myös ottaa vastaan muita parametreja. Seuraava metodi ottaa vastaan yhden int-parametrin, yhden String-parametrin ja vaihtelevan mittaisen määrän double - tyyppisiä parametreja. public void testi (int laskuri, String nimi, double... numerot) { // toiminnot } Jukka Harju, Jukka Juslin 2006 30

Vaihtelevan mittaiset parametrilistat Vaihtelevan mittainen parametrilista pitää olla metodin määrittelyssä viimeisenä. Yksi metodi ei voi ottaa vastaan vaihtelevan mittaista parametrilistaa. Myös konstruktorit voivat ottaa vastaan vaihtelevan mittaisia parametrilistoja. Jukka Harju, Jukka Juslin 2006 31