Lataa esitys
Esittely latautuu. Ole hyvä ja odota
JulkaistuJuha-Pekka Salonen Muutettu yli 9 vuotta sitten
1
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Standardi- ja tietorakenneluokkia
2
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 http://download.oracle.com/javase/1,5.0/docs/api/ 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 Grotenfelt220.9.2012
3
Esimerkki: java.lang.String-luokka Luokka String toteuttaa merkkijonotyypin sisältää merkkijonojen käsittelyoperaatioita. Vesa Ollikainen & Outi Grotenfelt320.9.2012
4
Esimerkki: String-luokka Esimerkissä metodit concat() ja toUpperCase() palauttavat viittaukset uusiin olioihin, jotka metodi luo. Vesa Ollikainen & Outi Grotenfelt420.9.2012 concat -metodin kutsu voitaisiin korvata + -operaattorilla. Kääntäjä muuntaa + -operaattorin sen toteuttaviksi metodikutsuiksi automaattisesti package testiprojekti; import java.util.*; public class Sanat { public static Scanner lukija = new Scanner(System.in); public static void main(String[] args) { 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()); } run: Anna alkuosa: MunAlku Anna loppuosa: ToinenLoppu Kokonaan: MunAlkuToinenLoppu Pituus: 18 Isoilla: MUNALKUTOINENLOPPU BUILD SUCCESSFUL (total time: 13 seconds)
5
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. Vesa Ollikainen & Outi Grotenfelt520.9.2012 Voidaan tehdä myös vanhemman StringTokenizer -luokan avulla.
6
Esimerkki: split() Merkkijono jono jaetaan alijonoihin kaksoispisteen kohdalta. Alijonot tallentuvat taulukkoon pilkotut. Erotinmerkit eivät tule mukaan taulukkoon. Vesa Ollikainen & Outi Grotenfelt620.9.2012 public class Pilkkominen { public static void main(String[] args) { String jono = "Ville:Virtanen:Jokitie 2 A 4:45100:Kouvola"; String pilkotut[]; pilkotut = jono.split(":"); for (int i=0; i<pilkotut.length; i++) System.out.println(pilkotut[i]); } run: Ville Virtanen Jokitie 2 A 4 45100 Kouvola BUILD SUCCESSFUL (total time: 1 seconds)
7
Esimerkki 2: split() Tässä erottimena on jokin kirjaimista X, Y ja Z sekä sen jälkeen mitkä tahansa kaksi merkkiä. Vesa Ollikainen & Outi Grotenfelt720.9.2012 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)
8
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ä. Vesa Ollikainen & Outi Grotenfelt820.9.2012 Vastaa oppikirjassa esiteltyä StringBuffer -luokkaa (JDK 5.0:sta alkaen, nopeampi, ei synkronoituva).
9
Esimerkki: StringBuilder 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 Grotenfelt920.9.2012 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; 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()); } run: tämäonekaluettava t � m � onekaluettava avatteulakeno � m � t 20 ava***tteulakeno � m � tXXX BUILD SUCCESSFUL (total time: 23 seconds)
10
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(), … 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 Grotenfelt1020.9.2012 import static java.lang.Math.*;
11
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 Grotenfelt1120.9.2012
12
Esimerkki: Scanner Esimerkissä luetaan ja tulostetaan kokonaisluku, liukuluku ja kaksi merkkijonoa. Kukin edeltää rivinvaihtoa. Vesa Ollikainen & Outi Grotenfelt1220.9.2012 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; kokoLuku = input.nextInt(); input.nextLine(); liukuLuku = input.nextDouble(); input.nextLine(); mJono1 = input.nextLine(); mJono2 = input.nextLine(); System.out.println(kokoLuku+" "+liukuLuku+" " +mJono1+" "+mJono2); } run: 23 2,456 kukku muru 23 2.456 kukku muru BUILD SUCCESSFUL (total time: 23 seconds)
13
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 Grotenfelt1320.9.2012
14
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 Grotenfelt1420.9.2012
15
ArrayList-olion luonnin syntaksi 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 Grotenfelt1520.9.2012 ArrayList henkilöt = new ArrayList ();
16
Vesa Ollikainen & Outi Grotenfelt1620.9.2012
17
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 Grotenfelt1720.9.2012
18
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 Grotenfelt1820.9.2012
19
Kääreluokista Alkeistietotyypin edustaja voidaan välittää kääreluokan olion konstruktorille. Myös muunnos toiseen suuntaan onnistuu. Kalvosarjan tekijän nimi19 double luku = 3.2; Double d = new Double(luku); double luku2 = d.doubleValue();
20
THANK YOU! www.metropolia.fi/en/ www.facebook.com/MetropoliaAMK outi.grotenfelt@metropolia.fi
Samankaltaiset esitykset
© 2024 SlidePlayer.fi Inc.
All rights reserved.