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

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

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

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

Taulukot. Jukka Harju, Jukka Juslin

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

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

14. Poikkeukset 14.1

Kurssin suoritus. Javan perusteet Kurssimateriaali. Kurssin aikataulu. Harjoitukset. Kurssin sisältö. Javan perusteet

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

14. Poikkeukset 14.1

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

15. Ohjelmoinnin tekniikkaa 15.1

OutputStream ja InputStream. Tietovirrat ja niiden suunnat. Tietovirtojen käyttö. FileInputStream esimerkki. DataOutputStream ja DataInputStream

Listarakenne (ArrayList-luokka)

7. Oliot ja viitteet 7.1

Olio-ohjelmointi Javalla

Mikä yhteyssuhde on?

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

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

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

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

16. Javan omat luokat 16.1

15. Ohjelmoinnin tekniikkaa 15.1

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

Metodien tekeminen Javalla

Java-kielen perusteet

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

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

1. Omat operaatiot 1.1

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

ITKP102 Ohjelmointi 1 (6 op)

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

20. Javan omat luokat 20.1

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

Javan perusteita. Janne Käki

Taulukoiden käsittely Javalla

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

Tietokannat II -kurssin harjoitustyö

17. Javan omat luokat 17.1

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

2. Olio-ohjelmoinista lyhyesti 2.1

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

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

Java kahdessa tunnissa. Jyry Suvilehto

Poikkeustenkäsittely

1 Tehtävän kuvaus ja analysointi

ITKP102 Ohjelmointi 1 (6 op)

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

Rajapinta (interface)

19. Olio-ohjelmointia Javalla 19.1

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

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

Harjoitus 5 (viikko 48)

Java-kielen perusteet

Ohjelmointi 2 / 2010 Välikoe / 26.3

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

17. Javan omat luokat 17.1

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

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

Mitä poikkeuskäsittely tarkoittaa?

Ohjelmoinnin jatkokurssi, kurssikoe

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

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

ITKP102 Ohjelmointi 1 (6 op)

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Sisällys. 15. Lohkot. Lohkot. Lohkot

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

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

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

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

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Luokan sisällä on lista

4. Olio-ohjelmoinista lyhyesti 4.1

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

Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Ta

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

Ohjelmoinnin perusteet, syksy 2006

7. Näytölle tulostaminen 7.1

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

ITKP102 Ohjelmointi 1 (6 op)

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

9. Periytyminen Javassa 9.1

P e d a c o d e ohjelmointikoulutus verkossa

Luokat ja oliot. Ville Sundberg

Harjoitustyö: virtuaalikone

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

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

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

Osio2: Taulukot Jukka Juslin

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

9. Periytyminen Javassa 9.1

Olio-ohjelmointi Virhetilanteiden käsittely

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 )

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Transkriptio:

Metodit Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin return; -lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua Metodi voi palauttaa alkeistyypin tai olion Tällöin return X; -lauseke on pakollinen. Metodissa ei saa olla suorituspolkuja, joilla returnlausekkeeseen ei päädytä. X on palautettava arvo, joka on arvotyypin tyyppinen. Metodit Arvotyyppi Esimerkki public static String viikonpaiva(int luku) { switch(luku) { case : return Ma ; case 2: return Ti ; return ; 2 Metodit Parametrit Parametrit annetaan sulkeissa Alkeistyypit ovat arvoparametreja Arvon muuttaminen metodin sisällä ei muuta alkuperäistä arvoa Oliot ovat viiteparametreja Saman olion käyttö metodin sisällä muuttaa myös alkuperäistä arvoa Metodit Parametrit public static void test(int i, String s, Student r) { i=0; s= Muutettu ; r.setname( Pekka ); // Esimerkkikutsu int j=; String t = A ; Student u = new Student( B ); test(j, t, u); System.out.println( Tulos: + j + + t + + u.getname()); // Tuloste: Tulos: A Pekka! 3 4 Metodit Kuormittaminen Samannimisiä metodeja voidaan toteuttaa eri parametreilla Paluuarvojen tulee samannimisillä metodeilla olla aina samat Samannimisten metodien toteuttamista eri parametreilla kutsutaan metodin kuormittamiseksi Metodit Kuormittaminen Esimerkki public void tulosta(final int luku) { System.out.println( luku ); public void tulosta(final String str) { System.out.println( str ); // Kutsuesimerkki tulosta(2); // Käyttää ylemää metodia tulosta( Teksti ); // Käyttää alempaa metodia 5 6 Javan perusteet 2004

Metodit Rekursio Jos ohjelmassa on metodi, joka kutsuu sisällään itseään uudestaan, käytetään siitä nimitystä rekursiivinen metodi Rekursiiviset metodit kutsuvat itseään eri parametreilla Parametrien perusteella metodi kutsuu itseään tai mikäli ollaan päästy perustapaukseen ei kutsua enää suoriteta Metodit Rekursio Rekursiossa jokaisella kutsulla lähestytään aina jotakin perustapausta Rekursio on perinteisissä proseduraalisissa ja olio-ohjelmointikielissä hidasta Teoriassa kaikki rekursiiviset metodit voidaan purkaa auki iteratiivisiksi versioiksi Rekursiota rajoittaa suurissa tapauksissa käytössä oleva muistin määrä 7 8 Metodit Rekursio Fibonaccin luvut Fibonaccin lukuja ovat: 0,,, 2, 3, 5, 8, 3, Ensimmäinen luku on 0, toinen luku ja siitä eteenpäin seuraava luku saadaan aina kahden edellisen summana Fibonnaccin lukuja voidaan laskea rekursiivista metodia hyväksikäyttäen Huomattavasti tehokkaampiakin menetelmiä on olemassa 9 Metodit Rekursio Fibonaccin luvut // Palauttaa n:nnen Fibonaccin luvun public int fib(int n) { if (n==) return 0; else if (n==2) return ; else return fib(n-) + fib(n-2); Esim: fib(4) 2 fib(4) fib(3) fib(2) fib(2) 0 fib() 0 Näkyvyysalueet ja muuttujien elinaika private, public paikalliset muuttujat Näkyvyysalueen valinta Ohjelmissa kannattaa aina valita mahdollisimman pieni näkyvyysalue jokaiselle muuttujalle ja metodille Kaikki luokan attribuutit kannattaa sijoittaa privatenäkyvyysalueeseen Luokan yleiseen käyttöön tarkoitetut metodit sijoitetaan public-näkyvyysalueeseen, kaikki muut private-näkyvyysalueeseen Lisäksi on olemassa protected-näkyvyysalue, joka on ikään kuin public:n ja private:n välimaastossa oleva. Käyttö on tarpeellista lähinnä kun hyödynnetään perintää. 2 Javan perusteet 2004 2

Paikallinen muuttuja vai luokan attribuutti Muuttujat sijoitetaan aina pienimpään mahdolliseen käyttöalueeseensa. Mikäli muuttujan käyttö on tarpeellista monissa luokan metodeissa tai se kuvaa olion tilaa, tehdään siitä attribuutti. Mikäli käyttö on tarpeellista vain yksittäisessä metodissa, käytetään paikallista muuttujaa. 3 Paikallisen muuttujan määrittely - esimerkki Paikallinenkin muuttuja kannattaa sijoittaa aina mahdollisimman rajattuun alueeseen. Esimerkki: public void printmembers() { Vector members = getallmembers(); for (int i=0;i<members.size();i++) { Member member = members.getat(i); String name = member.getname(); System.out.println( Jäsen: + name); Muuttujien esittelyt voitaisiin sijoittaa katkoviivalla osoitettuun paikkaan, mutta koska niitä ei käytetä kuin toistorakenteen sisällä, on ne sijoitettu toiston sisältämän lohkon sisään. 4 Muuttujien elinaika Jokaisella muuttujalla on näkyvyysalueen lisäksi ns. elinaika, jolloin se on olemassa Luokkamuuttujat on olemassa aina kun olion konstruktoria on kutsuttu, olemassaolo loppuu kun olioon ei ole enää yhtään viitettä Paikalliset muuttujat ovat olemassa lohkonsa sisällä. Kun lohko päättyy, paikallisen muuttujan elinaika päättyy. 5 Taulukot Taulukoiden määrittely, käsittely ja kopiointi Vaihtoehdot taulukoille 6 Taulukot Usein on tarvetta käsitellä ryhmää samantyyppisiä olioita tai perustietotyyppejä On raskasta ja virhealtista kirjoittaa esimerkiksi kymmeniä samantyyppisiä muuttujia peräkkäin ja suorittaa niille kaikille samaa operaatiota Apua tuovat taulukot, joissa yhteen muuttujaan pystytään sijoittamaan useita olioita 7 Yksiulotteinen taulukko Yksiulotteinen merkkijonotaulukko esitellään ja luodaan: String[] names = new String[4]; Rivi varaa tilan neljälle String-tyyppiselle oliolle. Se jättää kuitenkin kaikki oliot nullarvoiksi. Mikäli taulukko on luotu jostakin perustietotyypistä, ovat taulukon indeksit suoraan käytössä (ei tarvitse new:llä luoda joka paikkaan oliota) Taulukon indeksointi alkaa aina nollasta. 8 Javan perusteet 2004 3

Yksiulotteinen oliotaulukko Oliotaulukon sisältö olisi luonnin jälkeen: 0 null null 2 null 3 null Taulukon yksittäiseen olioon voidaan viitata []:n avulla: names[0] = new String( Pekka ); Edellinen rivi luo taulukon ensimmäiseen paikkaan uuden merkkijono-olion 9 Yksiulotteinen taulukko Yksiulotteisen taulukon kokoa voidaan muuttaa vain luomalla uusi taulukko. Taulukon kokoon saa length:llä: int size = names.length; Taulukon sallittuja sijoitus- ja lukupaikkoja ovat [0..length-]. Mikäli yritetään käyttää muita paikkoja, heittää Java ajonaikaisen virheen. 20 Yksiulotteinen oliotaulukko Käytettäessä String-luokkaa, voidaan kirjoittaa hieman lyhyemmin: names[0] = Pekka ; koska Java luo automaattisesti :lla erotetusta merkkijonosta uuden Stringolion Taulukon alustaminen Taulukkoon voidaan sijoittaa arvoja luonnin yhteydessä: final int[] daysinmonth = {3, 28, 3, 30, 3, 30, 3, 3, 30, 3, 30, 3; 2 22 Yksiulotteinen taulukko - esimerkki Yksiulotteinen taulukko esimerkki 2 String[] students = new String[3]; students[0] = new String( Matti ); students[] = new String( Maija ); students[2] = new String( Antti ); for (int i=0;i<students.length;i++) { System.out.println(students[i]); 23 private String [] m_students; public void createstudents() { m_students = new String[3]; m_students[0] = new String( Matti ); m_students[] = new String( Maija ); m_students[2] = new String( Antti ); public void printstudents() { for (int i=0;i<m_students.length;i++) { System.out.println(m_students[i]); 24 Javan perusteet 2004 4

Taulukon käyttöongelma Koon muuttaminen ei ole yksinkertaista Soveltuu huonommin tilanteisiin, joissa kokoa ei tunneta ennalta tai koko muuttuu usein 25 public class StudentArray { private String [] m_students; public StudentArray() { setarraysize(3); m_students[0] = new String( Matti ); m_students[] = new String( Maija ); m_students[2] = new String( Antti ); public void setarraysize(int newsize) { String[] newarray = new String[newSize]; int minlength; if (m_students.length<newsize) minlength = m_students.length; else minlength = newsize; for (int i=0;i<minlength;i++) { newarray[i] = m_students[i]; m_students = newarray; Taulukon koon muuttaminen Moniulotteiset taulukot Moniulotteiset taulukot Taulukot voivat olla moniulotteisia, koska yksittäinen taulukon alkio voi sisältää toisen taulukon [0] [] [0] [] [2] [3] 27 Esimerkiksi kaksiulotteinen taulukko: String[][] stringarray = new String[2][4]; stringarray[0][0] = new String( Ruutu (0,0) ); stringarray[0][] = new String( Ruutu (0,) ); int sizex = stringarray.length; // == 2 int sizey = stringarray[0].length; // == 4 String oneitem = stringarray[][2]; [0] [] [0][][2] [3] 28 Kokonaislukutaulukon järjestäminen lisäyslajittelu public void insertionsort(int [] intarray) { for (int i=;i<intarray.length;i++) { int tmp = intarray[i]; int j = i; while (j > 0 && intarray[j-] > tmp) { intarray[j] = intarray[j-]; j--; intarray[j] = tmp; Vector-luokka Vector-luokalla voidaan toteuttaa samat toiminnot kuin taulukolla. Lisäksi sillä on monia muita helpottavia ominaisuuksia. Kopiointi Koon muuttaminen Lisäys, poisto Vector-luokka löytyy java.util-paketista (import java.util.vector) 30 Javan perusteet 2004 5

Vector-luokka esimerkki import java.util.vector; Vector vector = new Vector(); vector.add( Pekka ); vector.add( Tomppa ); Tiedostojen käsittely vector.remove(0); String firstitem = (String)vector.get(0); vector.add( Satu ); for (int i=0;i<vector.size();i++) { System.out.println( (String)vector.get(i) ); 3 Tiedoston luku ja tallennus Poikkeusten käsittely Tietovirrat Oliot tiedostoissa 32 Tiedostot Tiedostot Tiedostojen käyttöä tarvitaan kun halutaan esimerkiksi säilyttää tietoa eri ohjelman ajokertojen välillä Rekisterit Asetustiedostot Tulosteet Tiedostoja käsitellään Javassa tietovirtojen kautta Vastaavia tietovirtoja käytetään Javassa komentoikkunaan tulostukseen ja verkon yli tapahtuvaan tiedonvälitykseen 33 34 File-luokka File-luokka esimerkki Javan File-luokka sisältää yksittäisen tiedoston tai hakemiston käsittelyyn liittyviä toimintoja File-luokka löytyy java.iopaketista (import java.io.file) File +File(String) +boolean canread() +boolean canwrite() +boolean exists() +String getabsolutepath() +boolean isfile() +boolean isdirectory() +boolean length() +boolean createnewfile() +boolean delete() +boolean mkdir() 35 import java.io.file; File file = new File( phonebook.txt ); if (!file.exists()) { if (file.createnewfile()) System.out.println( File created succesfully. ); else System.out.println( Couldn t create file. ); else { System.out.println( File phonebook.txt already exists. ); Esimerkki vaatii toimiakseen poikkeusten käsittelyn. 36 Javan perusteet 2004 6

Poikkeukset Tiedostojen käsittelyssä voi tapahtua monentyyppisiä virheitä Oikeudet järjestelmässä Levytila Tiedostojen olemassaolo Virheiden helppoa hallinnointia varten on Java-kielessä käytössä poikkeukset Poikkeukset Poikkeukset ovat olioita, joita ohjelmakoodista voidaan heittää (throw) Poikkeukset on otettava kiinni koodissa (catch) Poikkeuksia sisältävän koodin suoritus tehdään try-catch -lohkossa 37 38 Poikkeukset tiedostojen käsittelyssä Tiedostojen käsittelyssä File-luokka voi heittää IOException-tyyppisen poikkeuksen (löytyy java.io.ioexception-paketista) Kääntäjä ei käännä koodia ellei poikkeuksia ole otettu kiinni Poikkeusten käsittely import java.io.*; try { // Poikkeuksia mahdollisesti aiheuttava koodi tähän catch (IOException e) { // Poikkeuksen käsittely 39 40 Poikkeusten käsittely Javan API-luokkien metodien heittämät poikkeukset on kuvattu Javan APIdokumentaatiossa Poikkeusten kiinniotto kuuluu kurssin sisältöön, mutta niiden heittäminen ei 4 Javan perusteet 2004 7