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

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

20. Javan omat luokat 20.1

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

17. Javan omat luokat 17.1

17. Javan omat luokat 17.1

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Metodien tekeminen Javalla

16. Javan omat luokat 16.1

Listarakenne (ArrayList-luokka)

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

Rajapinta (interface)

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

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

Olio-ohjelmointi Javalla

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

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

Java-kielen perusteet

Ohjelmoinnin jatkokurssi, kurssikoe

public static void main (String [] args)

Taulukoiden käsittely Javalla

15. Ohjelmoinnin tekniikkaa 15.1

Java kahdessa tunnissa. Jyry Suvilehto

Java-kielen perusteita

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

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

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

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

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

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

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

Ohjelmoinnin perusteet, kurssikoe

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

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

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

7. Näytölle tulostaminen 7.1

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

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

14. Poikkeukset 14.1

Java-kielen perusteet

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

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Mikä yhteyssuhde on?

Periytyminen (inheritance)

7/20: Paketti kasassa ensimmäistä kertaa

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

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

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

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

Luokkakirjastot. esiintymämetodien käytöstä:

Metodien tekeminen Javalla

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Merkkien ja merkkijonojen käsittelyä Javalla

ITKP102 Ohjelmointi 1 (6 op)

14. Poikkeukset 14.1

Taulukot. Jukka Harju, Jukka Juslin

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Pakkauksen kokoaminen

Java-kielen perusteet

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Pakkauksen kokoaminen

Mitä poikkeuskäsittely tarkoittaa?

9. Periytyminen Javassa 9.1

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

1 Tehtävän kuvaus ja analysointi

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

Poikkeustenkäsittely

1. OPINTOJAKSON TAVOITTEET, SISÄLTÖ JA ESITIEDOT MATERIAALIT JA OHJELMISTOT... 5

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

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

Lista luokan sisällä

Groovy. Niko Jäntti Jesper Haapalinna Group 31

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

18. Abstraktit tietotyypit 18.1

Osio2: Taulukot Jukka Juslin

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

YHTEYSSUHDE (assosiation)

1. OPINTOJAKSON TAVOITTEET, SISÄLTÖ JA ESITIEDOT MATERIAALIT JA OHJELMISTOT... 5

7. Oliot ja viitteet 7.1

Java-kielen perusteita

5. HelloWorld-ohjelma 5.1

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

Ohjelmointi 2 / 2010 Välikoe / 26.3

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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 )

9. Periytyminen Javassa 9.1

1. Omat operaatiot 1.1

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

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

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

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

Ohjelmoinnin perusteet, syksy 2006

Transkriptio:

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

Standardi- ja tietorakenneluokkia Javan API, ArrayList Ohjelmointirajapinta (Application Programming Interface, API) tarjoaa ohjelmistokehittäjille luokkia rajapintoja Dokumentaatio Sun Microsystemsin sivuilla: http://download.oracle.com/javase/1,5.0/docs/api/ APIs Dokumentaatio sisältää pakkausten ja niiden luokkien kuvauksen. Esim. pakkauksista: java.lang sisältää kielen ytimen javax.swing sisältää käyttöliittymäkomponentteja Vesa Ollikainen & Outi Grotenfelt 2

Esimerkki: java.lang.string-luokka Luokka String toteuttaa merkkijonotyypin sisältää merkkijonojen käsittelyoperaatioita. Vesa Ollikainen & Outi Grotenfelt 3

Esimerkki: String-luokka package testiprojekti; import java.util.*; public class Sanat { public static Scanner lukija = new Scanner(System.in); public static void main(string[] args) { run: Anna alkuosa: MunAlku Anna loppuosa: ToinenLoppu Kokonaan: MunAlkuToinenLoppu Pituus: 18 Isoilla: MUNALKUTOINENLOPPU BUILD SUCCESSFUL (total time: 13 seconds) } String alkuosa, loppuosa, kokonaan; System.out.print("Anna alkuosa: "); alkuosa = lukija.nextline(); System.out.print("Anna loppuosa: "); loppuosa = lukija.nextline(); kokonaan = alkuosa.concat(loppuosa); System.out.println("Kokonaan: "+kokonaan); System.out.println("Pituus: "+kokonaan.length()); System.out.println("Isoilla: "+kokonaan.touppercase()); Esimerkissä metodit concat() } ja touppercase() palauttavat viittaukset uusiin olioihin, jotka metodi luo. concat-metodin kutsu voitaisiin korvata +-operaattorilla. Kääntäjä muuntaa +-operaattorin sen toteuttaviksi metodikutsuiksi automaattisesti Vesa Ollikainen & Outi Grotenfelt 4

split()-metodi String-luokan split()-metodi pilkkoo merkkijonon osiin erotinlausekkeen esiintymien kohdalta. Erotinlauseke ilmaistaan ns. säännöllisenä lausekkeena. Säännöllisissä lausekkeissa: piste (.)täsmää mihin tahansa merkkiin hakasulkeissa ([]) esitetään vaihtoehtoiset merkit asteriski (*) täsmää mihin tahansa merkkijonoon. Voidaan tehdä myös vanhemman StringTokenizer-luokan avulla. Vesa Ollikainen & Outi Grotenfelt 5

public class Pilkkominen { Esimerkki: split() public static void main(string[] args) { String jono = "Ville:Virtanen:Jokitie 2 A 4:45100:Kouvola"; String pilkotut[]; run: Ville Virtanen Jokitie 2 A 4 45100 Kouvola BUILD SUCCESSFUL (total time: 1 seconds) Merkkijono jono jaetaan alijonoihin kaksoispisteen kohdalta. Alijonot tallentuvat taulukkoon pilkotut. Erotinmerkit eivät tule mukaan taulukkoon. } } pilkotut = jono.split(":"); for (int i=0; i<pilkotut.length; i++) System.out.println(pilkotut[i]); Vesa Ollikainen & Outi Grotenfelt 6

Esimerkki 2: split() public class Pilkkominen { } public static void main(string[] args) { } String jono = "X00MieleniY15minunYaatekeviZ99aivoniY88ajatteleviZ14lähteäni"; String pilkotut[]; pilkotut = jono.split("[xyz].."); for (int i=0; i<pilkotut.length; i++) System.out.println(pilkotut[i]); run: Mieleni minun tekevi aivoni ajattelevi Lähteäni BUILD SUCCESSFUL (total time: 1 seconds) Tässä erottimena on jokin kirjaimista X, Y ja Z sekä sen jälkeen mitkä tahansa kaksi merkkiä. Vesa Ollikainen & Outi Grotenfelt 7

StringBuilder-luokka StringBuilder-luokkaa käytetään muuttuvan mittaisten merkkijonojen käsittelyyn. Sisältää metodeja dynaamisille merkkijonoille: append() liittää merkkijonon loppuun. insert() liittää merkkijonon annettuun positioon. Oliolle on varattu kapasiteetti, jota lisätään ajonaikaisesti, jos osoitettu kapasiteetti ei riitä. Vastaa oppikirjassa esiteltyä StringBuffer-luokkaa (JDK 5.0:sta alkaen, nopeampi, ei synkronoituva). Vesa Ollikainen & Outi Grotenfelt 8

Esimerkki: StringBuilder import java.util.*; public class SBKokeilu { public static Scanner lukija = new Scanner(System.in); public static void main(string[] args) { StringBuffer strbuffer = new StringBuffer(); String uusi; run: tämäonekaluettava t m onekaluettava avatteulakeno m t 20 ava***tteulakeno m txxx BUILD SUCCESSFUL (total time: 23 seconds) do{ uusi = lukija.nextline(); strbuffer.append(uusi); } while (uusi.length()>0); System.out.println(strBuffer.toString()); strbuffer.reverse(); System.out.println(strBuffer.toString()); strbuffer.append("xxx"); System.out.println(strBuffer.length()); if (strbuffer.length()>= 3) strbuffer.insert(3, "***"); System.out.println(strBuffer.toString()); Esimerkissä luetaan merkkijono, käännetään se, lisätään loppuun merkkijono XXX ja lisätään merkkijonon keskelle (positiosta 3 alkaen) merkkijono ***. } } Vesa Ollikainen & Outi Grotenfelt 9

Math-luokka ja static import Math-luokka kuuluu java.lang-pakettiin. Paketin julkiset luokat tuodaan käyttöön automaattisesti, joten import-lausetta ei tarvita. Luokka sisältää kokoelman matemaattisia funktioita. pow(), round(), sin(), max(), min(), import static java.lang.math.*; Esimerkin ns. staattinen tuonti hakee luokan java.lang.math staattiset metodit ja muuttujat siten että niihin voi viitata ilman luokkanimeä. notaation Math.PI tilalla voidaan käyttää notaatiota PI. Vesa Ollikainen & Outi Grotenfelt 10

java.util-pakkaus java.util-pakkaus sisältää monia hyödyllisiä luokkia. Date ajan esittämiseen Calendar päivämäärille Scanner syötteiden lukemiseen. Scanner-luokan avulla voidaan lukea eri tyyppisiä syötteitä käyttäen tyyppikohtaisia metodeja: nextint() lukee int-tyypisen syötteen nextdouble() lukee double-tyyppisen syötteen next() lukee String-tyyppisen syötteen nextline() lukee loput rivistä (String) ja rivinvaihdon Vesa Ollikainen & Outi Grotenfelt 11

Esimerkki: Scanner import java.util.*; public class LukijaLuokka { public static void main(string[] args) { Scanner input = new Scanner(System.in); int kokoluku; double liukuluku; String mjono1, mjono2; run: 23 2,456 kukku muru 23 2.456 kukku muru BUILD SUCCESSFUL (total time: 23 seconds) } } kokoluku = input.nextint(); input.nextline(); liukuluku = input.nextdouble(); input.nextline(); mjono1 = input.nextline(); mjono2 = input.nextline(); System.out.println(kokoLuku+" "+liukuluku+" " +mjono1+" "+mjono2); Esimerkissä luetaan ja tulostetaan kokonaisluku, liukuluku ja kaksi merkkijonoa. Kukin edeltää rivinvaihtoa. Vesa Ollikainen & Outi Grotenfelt 12

Tietorakenneluokkia Tietorakenteiden tarkoitus on tallentaa oliot siten, että niiden haku- ja muokkausoperaatiot ovat mahdollisia (ja tehokkaita). Esimerkkejä tietorakenteista: taulukko lista pino puu Java-kielessä on laaja kokoelma valmiita tietorakenneluokkia. Tarkastellaan aluksi esimerkkinä ArrayList-luokkaa. Vesa Ollikainen & Outi Grotenfelt 13

ArrayList ArrayList-tietorakenne on taulukko, jonka koko voi kasvaa dynaamisesti. Järjestelmä varaa ArrayList-oliolle kapasiteetin, jota se kasvattaa tarvittaessa. ArrayList-luokka toteuttaa listaluokille määritetyn List-rajapinnan, joka perii Collection-rajapinnan. List-rajapinta määrittää mm. metodit: get(int) hakee alkion set(int, Object) korvaa alkion Collection-rajapinta määrittää mm. metodit add() lisää alkion kokoelmaan clear() poistaa alkiot kokoelmasta Vesa Ollikainen & Outi Grotenfelt 14

ArrayList-olion luonnin syntaksi ArrayList<Henkilö> henkilöt = new ArrayList<Henkilö>(); Luotaessa ArrayList-olio on myös määritettävä siihen liitettävien olioiden tyyppi. Tätä piirettä kutsutaan geneerisyydeksi. Esimerkissä listaan voidaan tallentaa Henkilö-luokan olioita. Geneerisyys vähentää tyypinmuunnosten tarvetta verrattuna vanhempiin Java-versioihin, jotka eivät tukeneet geneerisyyttä. Luokan alkiot voidaan läpikäydä for-each-rakenteella. Vesa Ollikainen & Outi Grotenfelt 15

Vesa Ollikainen & Outi Grotenfelt 16

Alkeistietotyyppien kääreluokat Alkeistietotyypin muuttujia ei voi käsitellä olioina. Javan tietorakenneluokkiin voidaan kuitenkin tallentaa vain olioita. Muuttujat on muutettava tyyppiä vastaavan ns. kääreluokan olioiksi. Alkeistietotyyppiä vastaavan kääreluokan nimi alkaa isolla alkukirjaimella. esim. tietotyypin double kääreluokka on Double. poikkeuksena int-tyypin kääreluokka Integer ja char-tyypin kääreluokka Character. Vesa Ollikainen & Outi Grotenfelt 17

Esimerkki kääreluokasta ArrayList-rakenteeseen voidaan tallentaa Integer-olioita. int-tyyppiset luvut muutetaan rakenteeseen lisätessä automaattisesti kääreluokkansa edustajiksi (ns. autoboxing). Tulostuslauseessa kutsutaan automaattisesti kääreluokan (Integer) tostring()-metodia. Vesa Ollikainen & Outi Grotenfelt 18

Kääreluokista double luku = 3.2; Double d = new Double(luku); double luku2 = d.doublevalue(); Alkeistietotyypin edustaja voidaan välittää kääreluokan olion konstruktorille. Myös muunnos toiseen suuntaan onnistuu. Kalvosarjan tekijän nimi 19

THANK YOU! www.metropolia.fi/en/ www.facebook.com/metropoliaamk outi.grotenfelt@metropolia.fi