1 / 20

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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

said
Download Presentation

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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

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

  4. 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()); } } Esimerkki: String-luokka • Esimerkissä metodit concat() ja toUpperCase() palauttavat viittaukset uusiin olioihin, jotka metodi luo. run: Anna alkuosa: MunAlku Anna loppuosa: ToinenLoppu Kokonaan: MunAlkuToinenLoppu Pituus: 18 Isoilla: MUNALKUTOINENLOPPU BUILD SUCCESSFUL (totaltime: 13 seconds) concat-metodin kutsu voitaisiin korvata +-operaattorilla. Kääntäjä muuntaa +-operaattorin sen toteuttaviksi metodikutsuiksi automaattisesti Vesa Ollikainen & Outi Grotenfelt

  5. split()-metodi • String-luokansplit()-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

  6. 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]); } } Esimerkki: split() • Merkkijono jono jaetaan alijonoihin kaksoispisteen kohdalta. • Alijonot tallentuvat taulukkoon pilkotut. • Erotinmerkit eivät tule mukaan taulukkoon. run: Ville Virtanen Jokitie 2 A 4 45100 Kouvola BUILD SUCCESSFUL (totaltime: 1 seconds) Vesa Ollikainen & Outi Grotenfelt

  7. 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]); } } • Tässä erottimena on jokin kirjaimista X, Y ja Z sekä sen jälkeen mitkä tahansa kaksi merkkiä. run: Mieleni minun tekevi aivoni ajattelevi Lähteäni BUILD SUCCESSFUL (totaltime: 1 seconds) Vesa Ollikainen & Outi Grotenfelt

  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ä. Vastaa oppikirjassa esiteltyä StringBuffer-luokkaa (JDK 5.0:sta alkaen, nopeampi, ei synkronoituva). Vesa Ollikainen & Outi Grotenfelt

  9. 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()); } } 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 ***. run: tämäonekaluettava t�m�onekaluettava avatteulakeno�m�t 20 ava***tteulakeno�m�tXXX BUILD SUCCESSFUL (total time: 23 seconds) Vesa Ollikainen & Outi Grotenfelt

  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.PItilalla voidaan käyttää notaatiota PI. import static java.lang.Math.*; Vesa Ollikainen & Outi Grotenfelt

  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 Grotenfelt

  12. 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); } } Esimerkki: Scanner • Esimerkissä luetaan ja tulostetaan kokonaisluku, liukuluku ja kaksi merkkijonoa. • Kukin edeltää rivinvaihtoa. run: 23 2,456 kukku muru 23 2.456 kukku muru BUILD SUCCESSFUL (totaltime: 23 seconds) Vesa Ollikainen & Outi Grotenfelt

  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 Grotenfelt

  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 Grotenfelt

  15. 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

  16. Vesa Ollikainen & Outi Grotenfelt

  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 Grotenfelt

  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 Grotenfelt

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

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

More Related