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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

  • Upload
    said

  • View
    29

  • Download
    0

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Standardi- ja tietorakenneluokkia

Page 2: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Standardi- ja tietorakenneluokkiaJavan 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 220.9.2012

Page 3: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Esimerkki: java.lang.String-luokka

Luokka String toteuttaa merkkijonotyypin sisältää merkkijonojen käsittelyoperaatioita.

Vesa Ollikainen & Outi Grotenfelt 320.9.2012

Page 4: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Esimerkki: String-luokka

Esimerkissä metodit concat() ja toUpperCase() palauttavat viittaukset uusiin olioihin, jotka metodi luo.

Vesa Ollikainen & Outi Grotenfelt 420.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: MunAlkuAnna loppuosa: ToinenLoppuKokonaan: MunAlkuToinenLoppuPituus: 18Isoilla: MUNALKUTOINENLOPPUBUILD SUCCESSFUL (total time: 13 seconds)

Page 5: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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 Grotenfelt 520.9.2012

Voidaan tehdä myös vanhemman StringTokenizer-luokan avulla.

Page 6: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Esimerkki: split()

Merkkijono jono jaetaan alijonoihin kaksoispisteen kohdalta.

Alijonot tallentuvat taulukkoon pilkotut. Erotinmerkit eivät tule mukaan taulukkoon.

Vesa Ollikainen & Outi Grotenfelt 620.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:VilleVirtanenJokitie 2 A 445100KouvolaBUILD SUCCESSFUL (total time: 1 seconds)

Page 7: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Esimerkki 2: split()

Tässä erottimena on jokin kirjaimista X, Y ja Z sekä sen jälkeen mitkä tahansa kaksi merkkiä.

Vesa Ollikainen & Outi Grotenfelt 720.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:MieleniminuntekeviaivoniajatteleviLähteäniBUILD SUCCESSFUL (total time: 1 seconds)

Page 8: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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 Grotenfelt 820.9.2012

Vastaa oppikirjassa esiteltyä StringBuffer-luokkaa (JDK 5.0:sta alkaen, nopeampi, ei synkronoituva).

Page 9: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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 Grotenfelt 920.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� �20ava***tteulakeno m tXXX� �BUILD SUCCESSFUL (total time: 23 seconds)

Page 10: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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 Grotenfelt 1020.9.2012

import static java.lang.Math.*;

Page 11: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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 1120.9.2012

Page 12: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Esimerkki: Scanner

Esimerkissä luetaan ja tulostetaan kokonaisluku, liukuluku ja kaksi merkkijonoa. Kukin edeltää rivinvaihtoa.

Vesa Ollikainen & Outi Grotenfelt 1220.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:232,456kukkumuru23 2.456 kukku muruBUILD SUCCESSFUL (total time: 23 seconds)

Page 13: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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 1320.9.2012

Page 14: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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 1420.9.2012

Page 15: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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 Grotenfelt 1520.9.2012

ArrayList<Henkilö> henkilöt = new ArrayList<Henkilö>();

Page 16: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Vesa Ollikainen & Outi Grotenfelt 1620.9.2012

Page 17: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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 1720.9.2012

Page 18: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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 1820.9.2012

Page 19: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Kääreluokista

Alkeistietotyypin edustaja voidaan välittää kääreluokan olion konstruktorille.

Myös muunnos toiseen suuntaan onnistuu.

Kalvosarjan tekijän nimi 19

double luku = 3.2;Double d = new Double(luku);

double luku2 = d.doubleValue();

Page 20: Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

THANK YOU!

www.metropolia.fi/en/www.facebook.com/[email protected]