String-vertailusta ja Scannerin käytöstä (1/2)

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

15. Loogiset operaatiot.
6. Metodit.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
16. Javan omat luokat.
Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1
Jukka Juslin Poikkeukset ja niiden paikallistaminen * Jukka Juslin * Liittyy oppikirjan lukuun 11.
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
22. Taulukot.
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
13. Pakkaukset.
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT. LUOKKA JAVA ohjelma koostuu luokista LUOKKA sisältää metodeja molemmat sisältävät attribuutteja eli muuttujia.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Yksinkertaiset graafiset syöttö- ja tulostustoiminnot.
16. Lohkot Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat.
© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely.
Poikkeustenkäsittely  Mitä poikkeustenkäsittely tarkoittaa?  Poikkeuksen käsitteleminen  Poikkeusluokkien hierarkia  Poikkeuksen heittäminen 1.
9. Periytyminen Javassa.
Toiston tekeminen Javalla  Mikä toistorakenne on?  while toistorakenne  do-while toistorakenne  for toistorakenne 1.
Ohjelmoinnin tekniikkaa Sisällys for -lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely.
TAULUKKO YKSIULOTTEINEN TAULUKKO. TAULUKKO  Taulukon tarkoitus Ohjelmassa tarvitaan paljon samantyyppisiä samaan kohdealueeseen kuuluvia muuttujia Näitä.
13. Hyvä ohjelmointitapa (osa 1)
© Jukka Harju, Jukka Juslin
Funktion esittely eli prototyyppi tMyn1 Funktion esittely eli prototyyppi Funktion esittely (function declaration) kertoo funktion nimen, parametrien tyypit.
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
7. Oliot ja viitteet.
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
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.
19. Olio-ohjelmointia Javalla
20. Javan omat luokat.
Kuinka niitä käsitellään
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
5. Kapselointi Yleistä Kapseloinnilla (encapsulation) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Näppäimistöltä lukeminen Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In -luokka.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
22. Taulukot.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
@ Leena Lahtinen Toistorakenne Ohjelmassa toistetaan tiettyjä toimenpiteitä monta kertaa peräkkäin Toisto noudattaa sille kuuluvia tarkkoja standardoituja.
@ Leena Lahtinen TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA:  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ.
© Jukka Juslin1 Osio2 Olio-ohjelmointi: Merkkijonot eli Stringit Jukka Juslin.
ict1td002 - Copyright Raine Kauppinen 1 Tietovirrat  Tietovirran käsite  Tietovirtojen käyttö  Tekstitiedoston luku  Tekstitiedoston kirjoitus.
2. Lisää Java-ohjelmoinnin alkeita
Oliot ja luokat Oliot ja luokat Oliot (object) ja luokat (class) ovat keskeisiä olio- ohjelmoinnin käsitteitä. Olio-ohjelmointi on ohjelmointiparadigma,
Kontrollirakenteet laajemmin
Javan oliovirrat eli oliotiedostojen käsittely. Olio- eli objektitiedostojen käsittely Käsittely täysin samanlaista kuin muiden tiedostojen 1.Otetaan.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
14. Poikkeukset Sisällys Johdanto poikkeuksiin. Poikkeusten käsittely: − Poikkeusten käsittely paikallisesti. − Poikkeusten heittäminen. Exception.
Ohjausrakenteet Määräävät ohjelmakoodin suoritusjärjestyksen Ehtolause if – else on muotoa if (lauseke) lause1 else lause2 Jos lauseke on tosi, niin suoritetaan.
String-vertailusta ja Scannerin käytöstä (1/2)
5. Kapselointi.
1. Omat operaatiot.
17. Javan omat luokat.
7. Hyvä ohjelmointitapa..
13. Loogiset operaatiot.
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
7. Näytölle tulostaminen
Toisto Toistolausekkeet for, while(ehto){…} ja do {…} while(ehto)
8. Näppäimistöltä lukeminen
14. Hyvä ohjelmointitapa.
6. Metodit.
13. Pakkaukset.
4. Attribuutit.
7. Näytölle tulostaminen
13. Loogiset operaatiot.
3. Attribuutit.
13. Pakkaukset.
4. Luokan testaus ja käyttö olion kautta
Esityksen transkriptio:

String-vertailusta ja Scannerin käytöstä (1/2) Vertailuja tehdessä törmätään usein tilanteeseen, jossa merkkijonoa (esimerkiksi merkkijonomuuttujaa) pitää vertailla toiseen merkkijonoon. Tällöin tavanomainen yhtäsuuruusvertailu (==) ei toimi odotetulla tavalla. Sen sijaan on käytettävä String-luokan equals-operaatiota, esimerkiksi: String vastaus = ”Ei”; if (vastaus.equals(”Kyllä”)) {…} ict1td002 - Copyright Raine Kauppinen 3.9.2008

String-vertailusta ja Scannerin käytöstä (2/2) Scanner-luokkaa käyttäessä on huomioitava, että luvun lukeminen näppäimistöltä ei poista syötteen lopussa olevaa rivinvaihtomerkkiä, mikä aiheuttaa sen, että jos seuraavaksi luetaan merkkijono, ohjelma näyttää näyttää ”hyppäävän yli” merkkijonon lukemisen. Tämän voi hoitaa lisäämällä numeron luvun jälkeen käskyn syote.nextLine(); joka tyhjentään lukupuskurin, eli poistaa sieltä myös rivinvaihdon (käskyssä syote pitää korvata Scanner luokkaan viittaavan muuttujan nimellä). ict1td002 - Copyright Raine Kauppinen 3.9.2008

Luentoesimerkki 4.1 Tee ohjelma, joka kysyy käyttäjän iän ja nimen ja tulostaa ne näytölle. Jos käyttäjän nimi on Krister, ohjelma tulostaa näytölle myös tekstin ”Olet opettajan nimikaima!”. Talleta ratkaisusi tiedostoon Henkilotietoja.java. ict1td002 - Copyright Raine Kauppinen 3.9.2008

4. Metodit ja niiden käyttö Monimutkaisemmat ohjelmat rakennetaan useista metodeista (ja myöhemmin myös useista luokista). Tämä selkeyttää ohjelman rakennetta, koska eri kokonaisuudet voidaan erotella metodeiksi. Metodien avulla myös yksittäisten kokonaisuuksien toisto ja parametrisointi (toiminnan muuttaminen annettujen arvojen perusteella) on helpompaa. Metodeja on myös helpompi uusiokäyttää kuin kokonaisia ohjelmia. ict1td002 - Copyright Raine Kauppinen 3.9.2008

Metodien esittely ja kutsuminen (1/2) Metodi esitellään esittelyrivillä ja sen sisältö seuraa {}-sulkuparin sisällä, esimerkiksi: public void aja() {…} Olemme kirjoittaneet ja/tai käyttäneet jo muitakin metodeita, esimerkiksi main, nextLine, equals, random jne. ovat kaikki metodeita. Metodi nimeltä main esiteltynä kuten olemme tehneet on erikoisasemassa: se mahdollistaa ohjelman (luokan) suorittamisen (Eclipsessä Run As => Java Application). ict1td002 - Copyright Raine Kauppinen 3.9.2008

Metodien esittely ja kutsuminen (2/2) Metodin esittelyrivin ensimmäinen määre on metodin näkyvyys: private tarkoittaa metodia, jota voi käyttää vain saman luokan sisältä ja public metodia, jota voi käyttää myös muista luokista. Ennen metodin nimeä määritellään sen paluuarvon tyyppi ja metodin nimen jälkeen suluissa on metodin parametrilista (käsitellään muutaman kalvon jälkeen). Metodia kutsutaan sen nimellä, jolloin ohjelman suoritus siirtyy ko. metodin alkuun ja palaa seuraavalle riville, kun metodin suoritus päättyy. ict1td002 - Copyright Raine Kauppinen 3.9.2008

Luentoesimerkki 4.2 Tee ohjelma, joka tulostaa kolme kertaa tekstin ”Kokeillaan metodin kutsumista…”. Toteuta ohjelma siten, että siinä on julkinen aja-metodi, joka kutsuu kolme kertaa metodia tulostaTeksti. Metodi tulostaTeksti tulostaa yllä olevan tekstin kerran näytölle. Talleta ratkaisusi tiedostoon MetodiKutsu.java. ict1td002 - Copyright Raine Kauppinen 3.9.2008

Metodin parametrit ja paluuarvo (1/5) Metodin toimintaa voidaan ohjata välittämällä sille tietoja. Tätä varten metodille voi välittää parametreja (muuttujia), jotka ovat metodissa käytettävissä ja joilla on alkuarvoina välitetyt arvot. Esimerkiksi seuraavasti esitelty metodi public void laske(double x, double y) {…} saa parametreinaan kaksi desimaalilukua, x:n ja y:n, joiden arvo päätetään metodia kutsuttaessa. ict1td002 - Copyright Raine Kauppinen 3.9.2008

Metodin parametrit ja paluuarvo (2/5) Edellä esiteltyä laske-metodia voidaan kutsua esimerkiksi seuraavilla tavoilla: laske(1.2, 3.14); // metodissa x=1.2 ja y=3.14 double a=5.454; double b=12.75; laske(a,b); // metodissa x=5.454 ja y=12.75 Metodin kutsussa annettujen parametrien määrän ja tyyppien on vastattava metodin parametrilistan parametrien määrää ja tyyppejä. ict1td002 - Copyright Raine Kauppinen 3.9.2008

Metodin parametrit ja paluuarvo (3/5) Metodi voi myös palauttaa arvon, joka voidaan kutsun yhteydessä esimerkiksi sijoittaa muuttujan arvoksi. Edellä esitellyn laske-metodin esittelyrivillä public void laske(double x, double y) {…} määre void tarkoittaa, ettei metodi palauta arvoa. Jos metodi palauttaa arvon, korvataan määre void sillä tyypillä, jota vastaavan arvon metodi palauttaa, esimerkiksi int, double, boolean, char tai String. ict1td002 - Copyright Raine Kauppinen 3.9.2008

Metodin parametrit ja paluuarvo (4/5) Muutetaan laske-metodia siten, että se palauttaa desimaaliluvun: public double laske(double x, double y) {…} Nyt metodin sisällä on huolehdittava siitä, että metodi palauttaa desimaaliluvun. Tämä hoituu lauseella return, joka päättää metodin suorituksen ja palauttaa return-käskyä seuraavan arvon paluuarvona. ict1td002 - Copyright Raine Kauppinen 3.9.2008

Metodin parametrit ja paluuarvo (5/5) Metodi laske voi näyttää esimerkiksi seuraavalta: public double laske(double x, double y) { double tulos = x*y; return tulos; } Metodia voidaan kutsua esimerkiksi seuraavasti: double tulo = 0.0; tulo = laske(3.14, 8.0); ict1td002 - Copyright Raine Kauppinen 3.9.2008

Luentoesimerkki 4.3 Tee ohjelma, joka kysyy käyttäjältä kaksi kokonaislukua ja laskee niiden erotuksen. Tee ohjelmaasi julkinen metodi aja, joka kysyy käyttäjältä luvut, kutsuu metodia laskeErotus ja tulostaa metodin laskeman tuloksen. Metodi laskeErotus saa parametrinaan kaksi kokonaislukua, laskee niiden erotuksen ja palauttaa paluuarvonaan lasketun tuloksen. Talleta ratkaisusi tiedostoon Erotus.java. ict1td002 - Copyright Raine Kauppinen 3.9.2008

Muuttujien näkyvyys luokan sisällä (1/3) Aiemmin olemme jo oppineet, että muuttujat pitää aina esitellä ennen kuin niitä käytetään. Muuttujan esittelyn paikka määrää myös muuttujan näkyvyyden. Tähän asti olemme käyttäneet metodissa muuttujia, jotka ovat näkyvissä koko metodissa, koska ne on esitelty metodin alussa. Myös metodin saamat parametrit ovat tällaisia (niillä vain on valmiit alkuarvot). ict1td002 - Copyright Raine Kauppinen 3.9.2008

Muuttujien näkyvyys luokan sisällä (2/3) Metodin sisällä muuttuja näkyy siinä rakenteessa, jossa se on esitelty. Metodin alussa esitelty muuttuja näkyy tämän vuoksi koko metodissa. On myös mahdollista esitellä metodin sisällä sen rakenteissa vain rakenteen sisällä näkyviä muuttujia, esimerkiksi while-rakenteen sisällä esitelty muuttuja on käytettävissä vain ko. rakenteessa, muttei sen ulkopuolella (erityisesti ei rakenteen jälkeen!). ict1td002 - Copyright Raine Kauppinen 3.9.2008

Muuttujien näkyvyys luokan sisällä (3/3) Muuttujan voi myös esitellä luokan alussa siten, että se ei ole yhdenkään metodin sisällä. Tällaista muuttujaa kutsutaan luokan muuttujaksi ja se on käytettävissä kaikissa luokan metodeissa suoraan. Tiedon välittäminen luokan metodien välillä on siis parametrien lisäksi mahdollista luokkamuuttujilla, mutta niiden käyttämisessä kannattaa olla varovainen. ict1td002 - Copyright Raine Kauppinen 3.9.2008

Muuttujien näkyvyys luokan sisällä (esimerkki) public class Muuttujia { int luku1; // luokkamuuttuja public void aja(){ int luku2 = 0; //metodin muuttuja luku1 = 12; while (luku2 < 10){ double luku3 = Math.random(); // luku3 vain whilessa luku1 = luku1*luku1; System.out.println(luku3); luku2++; } System.out.println(luku2+"=>"+luku1); ict1td002 - Copyright Raine Kauppinen 3.9.2008

Java API Java-ohjelmoijan tärkeä tiedonlähde on Java API (API = Application Programming Interface), jossa kuvataan kaikki Javan tarjoamat valmiit välineet eli luokat. Java API:ssä luokat on ryhmitelty pakkausten ja luokan nimien mukaan, joten jompikumpi näistä on hyvä tietää tietoa etsiessä. API Javan versioon 6.0 löytyy osoitteesta http://java.sun.com/javase/6/docs/api/ ict1td002 - Copyright Raine Kauppinen 3.9.2008

Luentoesimerkki 4.4 Tutki Java API:a ja selvitä, onko Scanner-luokassa metodia a) totuusarvon (boolean) lukemiseen, ja b) yksittäisen merkin (char) lukemiseen? ict1td002 - Copyright Raine Kauppinen 3.9.2008