Java-kielen perusteet



Samankaltaiset tiedostot
Java-kielen perusteet

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Java-kielen perusteet

Java-kielen perusteita

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

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

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

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

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

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Metodien tekeminen Javalla

7. Näytölle tulostaminen 7.1

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

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

Olio-ohjelmointi Javalla

Lauseet. Ehdollinen lause. Tämän osan sisältö. Ehdollinen lause. Esimerkkejä. Yksinkertainen ehto. Lohkosulut ja sisennys. Ehdollinen lause if

1. Omat operaatiot 1.1

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

Java-kielen perusteita

Ohjelmoinnin perusteet Y Python

Java-kielen perusteet

Rajapinta (interface)

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

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

6. Muuttujat ja Java 6.1

8. Näppäimistöltä lukeminen 8.1

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

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

Ohjelmoinnin peruskurssi Y1

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

8. Näppäimistöltä lukeminen 8.1

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Tietotyypit ja lausekkeet. Lewis & Loftus & Jukka Juslin 1

Ohjelmoinnin jatkokurssi, kurssikoe

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

Taulukoiden käsittely Javalla

Taulukot. Jukka Harju, Jukka Juslin

Listarakenne (ArrayList-luokka)

Tietotyypit ja operaattorit

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

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit:

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

Ohjelmoinnin peruskurssi Y1

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

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

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

6. Muuttujat ja Java 6.1

Johdatus Ohjelmointiin

Ohjelmoinnin perusteet Y Python

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

ITKP102 Ohjelmointi 1 (6 op)

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

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Javan perusteita. Janne Käki

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

Harjoitus 2 (viikko 45)

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

19. Olio-ohjelmointia Javalla 19.1

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

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

812341A Olio-ohjelmointi, Olio-ohjelmoinnin peruskäsitteet ja Java-kieli

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

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

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

Osoitin ja viittaus C++:ssa

Ohjelmoinnin peruskurssi Y1

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

Ohjelmoinnin perusteet, kurssikoe

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

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

Ohjelmoinnin perusteet, 1. välikoe

Ohjelmoinnin perusteet (Java)

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

17. Javan omat luokat 17.1

Poikkeustenkäsittely

Harjoitus 5 (viikko 48)

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

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Ohjelmoinnin perusteet Y Python

9. Periytyminen Javassa 9.1

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

20. Javan omat luokat 20.1

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

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

11. Javan toistorakenteet 11.1

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op)

Harjoitustyö: virtuaalikone

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

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

Transkriptio:

2 Java-kielen perusteet Tämän osan sisältö Syntaksi Ohjelma, luokka, metodi Tunnukset, muuttujat ja tyypit esittely, alustaminen, näkyvyyssäännöt Syöttö ja tulostus Metodit määrittely, kutsu, parametrit, paluuarvo Vakiot Laskulausekkeet, operandit Merkkijonot käs. tarkemmin myöhemmin Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-1 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-2 Syntaksi On säännöstö, joka määrää ohjelman muodollisen rakenteen rakenneosat kirjoitettava "puolipilkulleen" oikein Ohjelman rakenteen esittämisessä käytetään kielen omia englanninkielisiä varattuja sanoja ohjelmoijan itse keksimiä sanoja, tunnuksia muuttujan tunnus, aliohjelman (metodin) tunnus, operaattoreita (esim. +, -, /, *) ja erottimia (esim. ;,. ja välilyönti) Myös Javan luokkakirjastojen asioilla omat tunnuksensa, mutta ohjelmoija voi näkyvyyssääntöjen puitteissa ottaa nekin tunnukset omaan käyttöönsä (jolloin oletusmerkitys katoaa) Jotta erotetaan helposti, mikä on ohjelmoijan "omaa tuotantoa", kurssin esimerkeissä ohjelmoijan itse nimeämät asiat on kirjoitettu suomeksi ja Javan asiat englanniksi. Ohjelma, luokka, metodi Java-ohjelma koostuu yhdestä tai useammasta luokasta (class) tavallisimmin kukin luokka omassa tiedostossaan luokka ~ käännösmoduuli Luokka koostuu luokan muuttujista ja metodeista (method) ohjelman suoritus alkaa metodista main() vain yhdessä ohjelman luokista main()-metodi Metodi koostuu useista Java-kielisistä lauseista lauseosassa (koottu lohko) metodin toiminnan määrittely - metodin paikallisten muuttujien esittely - peräkkäisyys, valinta, toisto - jonkun muun metodin kutsu metodin parametrit esitellään metodin otsakkeessa - kutsussa parametreille on vietävä arvot metodin mahd. paluuarvo esitellään metodin otsakkeessa - jos ei palauta mitään käytetään sanaa void Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-3 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-4 otsake luokan runko Luokka tiedostossa LuokanNimi.java Metodin palauttaman arvon tyyppi /* Kommentteja ja selityksiä luokasta */ public class LuokanNimi { // luokan muuttujien esittelyt private static int omametodi(double parametri) { // muut luokan metodit Parametrin tyyppi public metodia voi kutsua tämän luokan ulkopuolelta private metodia voi kutsua vain tämän luokan sisältä static metodi sijaitsee muistissa kiinteässä kohdassa (kääntäjä päätti) metodin otsake metodin runko Esimerkki Tämä metodi ei palauta arvoa /* Tämä ohjelma piirtää tähdillä nelikulmion */ public class Nelio { private static void tulostarivi(int pituus){ int lkm = 0; while (lkm < pituus) { System.out.print("*"); lkm = lkm + 1; System.out.println(); Metodi int korkeus, leveys = 10; korkeus = 5; while (korkeus > 0) { tulostarivi(leveys); korkeus = korkeus - 1; Metodi Nelio.java Parametrimuuttuja saa arvon, kun metodia kutsutaan Suoritus alkaa aina main()-metodista Muuttujien esittelyt Metodin kutsu Huomaa koottujen lohkojen käyttö! Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-5 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-6 Lue kirjasta s. 32-37 Tunnukset Muuttujat Tyypit Tunnukset (identifiers) Nimiä esim. muuttujille, vakioille, metodeille, kirjastoille Säännöt alkavat kirjaimella, sitten kirjaimia tai numeroita tai _ isot ja pienet kirjaimet ovat eriarvoisia saa käyttää skandinaavisia kirjaimia å, ä, ö, Å, Ä ja Ö ei pituusrajoituksia Esimerkkejä Math luokkakirjaston nimi, jossa matemaattisia metodeja Math.sin() luokassa Math olevan metodin sin kutsu Math.PI vakion pii nimi int kokonaislukutyypin tunnus double liukulukutyypin tunnus Pallo itse nimetyn luokan tunnus nopeus itse nimetyn muuttujan tunnus Huomaa vakiintuneet kuvanala itse nimetyn muuttujan tunnus kirjoitusasut. asetaarvo() itse nimetyn metodin kutsu Noudata! MAX itse nimetyn vakion tunnus ks. http://java.sun.com/docs/codeconv/ Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-7 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-8

Muuttujat (variables) Tyyppi (type) Tietovarastoja erilaisille asioille ("muistilappuja") Muuttujalla tunnus sekä tyyppi tunnus on muuttujan yksilöivä nimi tyyppi määrittelee millaista tietoa muuttujassa voi säilyttää ja millaisia operaatioita muuttujaan voi kohdistaa esim. kokonaislukumuuttujaan voi lisätä kokonaislukuja, mutta ei desimaalilukuja Ennen muuttujan käyttöä kääntäjälle kerrottava nuo molemmat asiat muuttujan esittelyssä String käyttäjännimi; int lkm; On tyypillistä, että muuttujan arvo muuttuu ohjelman suorituksen aikana useaan kertaan (tästä nimitys muuttuja) lkm = 0; lkm = lkm + 1; Sijoituslause: "saa arvokseen" Muuttujan tietotyyppi tai lyhyemmin tyyppi ilmaisee kääntäjälle kuinka paljon muuttuja tarvitsee muistista tilaa minkälaista (-tyyppistä) tietoa sinne voi tallettaa minkälaisia operaatioita siihen voidaan kohdistaa Javan tietotyypit ovat alkeistietotyypit sekä oliotyypit Alkeistietotyypit Tyyppi Selitys Koko Arvoalue (min..max) byte tavu 8 bittiä -128-127 short lyhyt kokonaisluku 16 b -32768 32767 int kokonaisluku 32 b -2147483648 2147483647 long pitkä kokonaisluku 64 b -2 63 2 63-1 float lyhyt liukuluku 32 b 10-38 10 38 (tarkkuus n. 6 desimaalia) double liukuluku 64 b 10-308 10 308 (n. 16 desimaalia) char Unicode-merkki 16 b kaikki merkit boolean totuusarvo 8 b tai 16 b true tai false Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-9 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-10 Kaikki olio-ohjelmoinnin luokat ovat oliotyyppejä luokka pitää sisällään loogisesti yhteenkuuluvia muuttujia sekä metodit, joilla muuttujien arvoja käsitellään oliot eivät sisälly tämän kurssin aihepiiriin Myös merkkijonotyyppi String on oliotyyppi merkkijono on kokoelma peräkkäisiä merkkejä kukin merkki vie tilaa 16 bittiä pituutta ei ole rajoitettu String käyttäjännimi = Olli Ohjelmoija ; String on myös Javan luokkakirjasto sisältää valmiita metodeja merkkijonojen käsittelemiseksi Merkkijonojen käsittelystä tarkemmin metodeihin ja lauseisiin tutustumisen jälkeen Muuttujan esittely Kaikki ohjelman muuttujat pitää esitellä ennen käyttöä Muuttujan voi esitellä missä tahansa kohdassa koottua lohkoa Esittely on muotoa <muuttujan tyyppi> <muuttujan nimi> int indeksi, lkm, summa; char merkki; String nimi; boolean tulos; näillä kaikilla sama tyyppi Käytä muuttujille aina niiden käyttötarkoitusta kuvaavia nimiä esim. sademäärä, pisteet, palkka ei esim. s, pi, pa Hyvä tapa: kommentoi muuttujan käyttötarkoitus, ellei ilmeisen selvää Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-11 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-12 Muuttujien näkyvyys Muuttujia voi määritellä missä tahansa kohdassa lohkoa Pääohjelmametodin tai minkä tahansa muun metodin sisällä määriteltyjä muuttujia kutsutaan paikallisiksi muuttujiksi paikalliset muuttujat ovat käytettävissä omassa lohkossaan määrittelyriviltä alkaen Muuttujia voi esitellä myös metodien ulkopuolella niitä kutsutaan globaaleiksi muuttujiksi (luokkamuuttujiksi) ovat käytettävissä ko. luokkatiedoston kaikissa metodeissa, ja tietyin lisämäärein myös muissa luokkatiedostoissa Eri kootuissa lohkoissa voi olla samannimisiä muuttujia, ja ne ovat toisistaan täysin riippumattomia viittaus kohdistuu aina siinä lohkossa esiteltyyn muuttujaan, jossa lausekin on Muuttujan alustaminen Muuttujalle annettava arvo ennen kuin sitä voi käyttää laskutoimitusten operandina, tulostuksessa jne. arvoa ei saa tutkia ennen kuin se on määritelty kääntäjä huomaa ja tilanteesta saadaan virheilmoitus Muuttujan arvon voi määritellä esittelyn yhteydessä int summa = 0; "muuttuja summa saa arvokseen 0" boolean lopetus = false, onkook; tai erikseen sijoituslauseella int luku; luku = 0; tai muuttujalle voi lukea arvon (näppäimistöltä tai tiedostosta) luku = Oma.lueInt(); Metodin parametri (muuttuja sekin) saa alkuarvon metodia kutsuttaessa Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-13 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-14 Lue kirjasta s. 29-32, 50-53 Syöttö Tulostus /* Tämä ohjelma tulostaa kuluvan vuoden vuosiluvun. Tämä tässä oleva teksti on monirivinen kommentti. */ public class TulostaVuosi { int tamavuosi = 2012; // muuttujan alustaminen System.out.print("Nyt on vuosi "); System.out.println(tamaVuosi); System.out.println("Nyt on vuosi " + tamavuosi); Nyt on vuosi 2012 Nyt on vuosi 2012 merkkijonojen katenointi Tulostusoperaatiot print seuraava tulostus samalle riville println seuraava tulostus uudelle riville printf muotoiltu tulostus (formatted) arvo ensin merkkijonoksi PS. Kirjan esimerkkikoodit löytyvät T:-levyltä Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-15 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-16

Huom! Scanner Luokka, joka tarjoaa lukemiseen tarvittavat metodit Ei automaattisesti käytettävissä, tuotava käyttöön import-määreellä import java.util.scanner; Ohjelmakoodissa luotava ensin Scanner-tyyppinen (olio)muuttuja Scanner input = new Scanner(System.in); ja sitten voi lukea oletus: näppäimistö int iii = input.nextint(); // kokonaisluvun lukeminen double ddd = input.nextdouble(); // desimaaliluvun lukeminen String sss = input.nextline(); // kokonaisen rivin lukeminen String sana = input.next(); // lue seuraavaan tyhjämerkkiin asti Muut paitsi nextline ohittavat luettavan edessä olevat tyhjämerkit välilyönti, tab ja rivivaihto ovat tyhjämerkkejä Ei osaa käsitellä virheellisesti annettua syötettä, ohjelma "kaatuu" poikkeustilanteiden käsittelytapa opetetaan kurssilla Olio-ohjelmointi Desimaaliluvun syöttömuoto riippuu järjestelmän LOCALE-asetuksista annettava joko muodossa 1.25 tai 1,25 englannin kieli, suomen kieli Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-17 import java.util.scanner; import java.util.locale; public class Lukemista { String rivi; int eka; double toka; Locale.setDefault(Locale.ENGLISH); // nyt syötettäessä käytetään pistettä Scanner näppis = new Scanner(System.in); System.out.println( Anna nimesi: ); rivi = näppis.next(); System.out.println( Anna kokonaisluku: ); eka = näppis.nextint(); System.out.println( Anna reaaliluku: ); toka = näppis.nextdouble(); System.out.println( Syötit: + eka + ", " + toka + ", " + rivi); Tarkempaa tietoa Scanner-luokasta Java SE 6 API-dokumentaatiosta ks. java.sun.com/javase/6/docs/api Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-18 Swing Myös Swing-kirjaston JOptionPane-luokan syöttö- ja tulostusdialogeja voi käyttää muuttujien arvojen lukemiseen Kirjastorutiinit saa käyttöön lisäämällä ohjelman alkuun import-lauseen import javax.swing.*; Syöttö String lukustr; int luku; lukustr = JOptionPane.showInputDialog("Anna kokonaisluku"); luku = Integer.parseInt(lukuStr); showinputdialog palauttaa syötteen aina String-muuttujaan se pitää muuttaa halutuksi numeeriseksi tyypiksi metodilla Integer.parseInt() tai Double.parseDouble() import javax.swing.*; public class PyydäJaTulostaKokonaisluku { int luku; String lukustr; PyydäJaTulostaKokonaisluku.java lukustr = JOptionPane.showInputDialog("Anna kokonaisluku"); luku = Integer.parseInt(lukuStr); JOptionPane.showMessageDialog(null,"Luku on " + luku); System.exit(0); Kirja s. 52 Tulostus JOptionPane.showMessageDialog(null, Tulostettava teksti ); 2 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-19 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-20 Oma.java Koska muuttujien arvojen lukeminen näppäimistöltä ei aina ole suoraviivaista (virhetilanteet!), käytämme itsetehdyn luokan Oma metodeja Esimerkki x = Oma.lueInt() d = Oma.lueDouble() c = Oma.lueChar() s = Oma.lueString() kokonaisluvun lukeminen desimaaliluvun lukeminen merkin lukeminen merkkijonon lukeminen int x; System.out.print( Anna kokonaisluku: ); x = Oma.lueInt(); Luokan metodit eivät hyväksy virheellisiä syötteitä Oma-luokka (nimellä Oma.java) löytyy kurssin hakemistosta T:-levyltä Kopioi samaan hakemistoon (pakkaukseen), jossa sitä käyttävät ohjelmat ovat! public class Kysely { String nimi; char sukunimenekakirjain; double paino; Kysely.java System.out.print("Anna etunimesi: "); nimi = Oma.lueString(); System.out.print("Anna sukunimesi 1. kirjain: "); sukunimenekakirjain = Oma.lueChar(); System.out.print("Anna painosi (kg): "); paino = Oma.lueDouble(); System.out.println("Hei " + nimi + " " + sukunimenekakirjain + ". " + "Painosi on " + paino + " kg."); Anna etunimesi: Urho Anna sukunimesi 1. kirjain: K Anna painosi (kg): 85 Hei Urho K. Painosi on 85 kg. kutakin käyttötarkoitusta varten oma muuttuja Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-21 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-22 public class Summa { Summa.java int x; int y; int summa; System.out.println("Anna kaksi kokonaislukua, " + "lasken niiden summan."); System.out.print("Anna 1. luku: "); x = Oma.lueInt(); System.out.print("Anna 2. luku: "); y = Oma.lueInt(); summa = x + y; System.out.println("Lukujen summa on " + summa); System.out.println("Lukujen summa on " + x + y); System.out.println("Lukujen summa on " + (x + y)); Anna kaksi kokonaislukua, lasken niiden summan. Anna 1. luku: 2 Anna 2. luku: 8 Lukujen summa on 10 Lukujen summa on 28 Lukujen summa on 10 katenoi kaksi erillistä lukuarvoa peräkkäin Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-23 jotta tulkitsee yhteenlaskuksi Muotoiltu tulostus lippu - tulostus kentän vasempaan reunaan + etumerkki näkyviin 0 etunollat näkyviin leveys.tarkkuus pienin mahd. kentän leveys desimaaliosan pituus muoto d decimal f floating-point number e exponential notation g käytä edellisistä lyhyempää muotoa s string of characters c char x unsigned hexadecimal o unsigned octal Toi on pilkku Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-24 kirja s. 48 System.out.printf("%[lippu][leveys[.tarkkuus]]muoto", argumentti) Huom: argumentit lopussa pilkuin eroteltuna yhtä monta kuin %-muotoilujakin [ ] tarkoittaa syntaksimerkinnöissä valinnaista osaa, ts. osa voi puuttua oletus: oikeaan reunaan

import java.util.scanner; public class MuotoiltuTulostus { static Scanner lukija = new Scanner(System.in); System.out.printf("Anna nimesi: "); String nimi = lukija.next(); System.out.printf("Nimesi on %s%n", nimi); Rivinvaihdon (new line) voi antaa joko muodossa %n tai \n System.out.printf("Anna ikäsi: "); int ika = lukija.nextint(); System.out.printf("Olet ensi vuonna %d vuotta\n", ika+1); System.out.printf("Anna painosi (kg): "); double paino = lukija.nextdouble(); System.out.printf("Anna pituutesi metreinä esim 1,78: "); double pituus = lukija.nextdouble(); double painoindeksi = paino / (pituus*pituus); Anna nimesi: Pekka Nimesi on Pekka Anna ikäsi: 25 Olet ensi vuonna 26 vuotta Anna painosi (kg): 87 Anna pituutesi metreinä esim 1,78: 1,86 Pituutesi on 1,86 m Painoindeksisi, Pekka, on 25,15 Antamasi tiedot olivat Nimi Ika Pituus Paino Pekka 25 1,86 87,00 System.out.printf("Pituutesi on %.2f m\n", pituus); System.out.printf("Painoindeksisi, %s, on %.2f", nimi, painoindeksi); System.out.printf("\n\nAntamasi tiedot olivat\n"); System.out.printf("%-20s%6s%8s%8s\n", "Nimi","Ika","Pituus","Paino"); System.out.printf("%-20s%6d%8.2f%8.2f\n", nimi,ika,pituus,paino); Kirja s. 50 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-25 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-26 Lue kirjasta s. 106-118 Metodit Metodit Metodien käyttö tukee asteittain tarkentuvaa suunnittelua tee kustakin loogisesta kokonaisuudesta metodi piilota yksityiskohdat metodin sisälle ohjelmasta tulee helpommin ymmärrettävä ja helpommin testattava Samanlaisina toistuvia ohjelmanosia ei saa kirjoittaa useaan kohtaan, vaan niistä on tehtävä metodeja niitä sitten kutsutaan useasta kohdasta Metodin otsakkeessa esitellään - metodin mahdollisesti saamien parametrien tyypit ja tunnukset - kutsussa nuo muuttujat saavat alkuarvonsa kutsujalta - metodin mahdollisesti palauttaman paluuarvon tyyppi = kutsurajapinnan esittely Metodin runko koostuu kootusta lohkosta - metodin paikallisten muuttujien esittely - peräkkäisyys, valinta, toisto, syöttö, tulostus - jonkun muun metodin kutsu = metodin toiminnan määrittely Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-27 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-28 Paluu ja arvon palauttaminen kutsujalle public class MunLuokka { // globaalien muuttujien esittelyt tähän // luokan muut metodit tähän Paluuarvon tyyppi private static int munmetodi(double x){ return(3*x); int tulos = munmetodi(5); Parametrin tyyppi ja sen tunnus otsake runko Metodin kutsu Metodin kutsu Ohjelman suoritus siirtyy metodiin, kun sitä kutsutaan nimellä jos metodilla parametreja, ne asetetaan kutsussa sulkeisiin heti nimen perään sulut pakolliset, vaikkei metodilla olisi parametrejakaan Kutsu siirtää ohjelman kontrollin kutsuttuun metodiin, ja suoritus jatkuu metodin lauseiden suorituksella Kun metodin toiminta päättyy, kontrolli palaa takaisin kutsukohtaan kun suoritettu metodin viimeinen lause, tai kun suoritetaan return()-lause public class MunLuokka { private static int laske() { return 42; private static void tee(int x) { tulos = laske(); public static void main() { tee(5); Käytämme tällä kurssilla vain staattisia metodeja. Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-29 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-30 Yksinkertaisimmillaan kutsussa ei välitetä parametreja metodille, eikä se palauta arvoa public class Kukuntaa { Paluuarvon tyyppinä void Parametrilista tyhjä private static void kukkuu() { System.out.println("\n"); kukkuu(); kukkuu(); Jos halutaan, että metodia ei saa kutsua määrittelyluokkansa ulkopuolelta, se esitellään määreellä private Kun metodi määritellään julkiseksi (public), sitä voi kutsua mistä tahansa, myös luokan ulkopuolelta public class Kakikello { public static void kukkuu() { System.out.println("\n"); Kakikello.java public class Kakikellotesti { Kakikello.kukkuu(); Kakikellotesti.java Staattisia metodeja kutsutaan aina luokkaan (ei olioon) liittyen Vain yhdessä samaan ohjelmaan kuuluvista luokista on main()-metodi void = tyhjä, merkityksetön, vapaa, avoin Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-31 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-32

Kutsu onnistuu edellä kuvatulla tavalla, kun luokat sijaitsevat samassa pakkauksessa (eli hakemistossa) Muissa pakkauksissa olevien luokkien staattisten metodien käyttö vaatii import-lauseen esim. jos luokka Oma.java olisi pakkauksessa apurutiinit import apurutiinit.oma; System.out.print("Montakos söit? "); int montako = Oma.lueInt(); Parametrit Jos metodin halutaan toimivan eri kutsukerroilla eri tavoin, sille voi välittää arvoja parametrien avulla Todellisena parametrina voi kutsussa olla mikä tahansa lauseke, jolle voi laskea arvon ennen metodiin siirtymistä public static void kukkuu(int lkm){ while (lkm > 0){ System.out.println(""); lkm = lkm - 1; Kutsuesim: int x=5; kukkuu(2); kukkuu(x); kukkuu(x+2) Parametri on metodin paikallinen muuttuja joka saa alkuarvonsa kutsun yhteydessä muut metodin paikalliset muuttujat sen sijaan alustettava erikseen Paikalliset muuttujat ovat olemassa vain silloin, kun metodia suoritetaan niihin voi viitata vain metodin rungossa (koottu lohko) Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-33 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-34 Kuormittaminen Samalle metodinimelle voi kirjoittaa erilaisia versioita, jos metodit eroavat parametrien perusteella toisistaan mekanismia kutsutaan funktion kuormittamiseksi parametrien lukumäärä tai tyypit erilaisia (paluuarvon tyyppien ero ei riitä!) kääntäjä osaa päätellä kutsun parametrien perusteella kumpaa tarkoitetaan public class Kakikello { public static void kukkuu() { System.out.println( Cuckoo"); public static void kukkuu(int lkm){ while (lkm > 0){ System.out.println(""); lkm = lkm - 1; kukkuu(); kukkuu(5); kirja s. 112 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 6-35 Cuckoo Metodin otsakkeessa kuvattuja parametreja kutsutaan muodollisiksi parametreiksi (formal) Kutsussa niiden arvoiksi tulee todellisten (actual) parametrien arvot eli ne saavat alkuarvonsa kutsuttaessa Todellisen parametrin nimi voi olla sama kuin vastaavan muodollisen parametrin, mutta tämä ei ole välttämätöntä metodille välitetään aina vain parametrin arvo Todellisten parametrien ja paluuarvon oltava oikeaa tyyppiä Metodin määrittely Metodin kutsu count = 2; ch = calc(2, count, HELLO ); O private static char calc(int num1, int num2, String msg){ int sum = num1 + num2; char result = msg.charat(sum); return result; Merkkijonon merkit indeksoidaan alkaen numerosta 0 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-36 Paluuarvo Metodi voi kutsua myös toista metodia Metodi voi palauttaa tietoa kutsujalleen return-lauseella Jos metodi ei palauta arvoa, paluuarvon tyyppi on void, eikä return-lausetta välttämättä tarvitse käyttää public class Laskuri { private static int summa(int eka, int toka){ int sum; sum = eka + toka; return sum; // palauta arvo kutsujalle int x = 1; int y = 2; int z; z = summa(x,y); // ota paluuarvo vastaan System.out.println("Summa on " + z); eka: 1 toka: 2 sum: args: x: 1 y: 2 z: public class Laskentoa { private static int summa(int eka, int toka){ return eka + toka; // palauta arvo kutsujalle private static void luejalaske() { int eka, toka, summa; System.out.print("Anna luku: "); eka = Oma.lueInt(); System.out.print("Anna toinen luku: "); toka = Oma.lueInt(); summa = summa(eka,toka); // ota paluuarvo vastaan System.out.println("Summa on " + summa); luejalaske(); Näkyvyyssääntöjen nojalla nämä ovat eri muuttujia vaikka nimi onkin sama! Muuttuja summa ja metodin summa() kutsu eroavat sulkujen perusteella Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-37 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-38 Vakiot Numeerista tai tekstitietoa, joka ei muutu ohjelman suorituksen aikana Vakiot Paljaat vakiot eli literaalivakiot Numeeriset vakiot esim. 5, 5.0, -5, 12.4 Merkkivakiot esim. '5', 'A', 'a' boolean-vakiot true ja false Merkkijonovakiot esim. "Java" Lue kirjasta s. 37-41 Nimetyt vakiot muuttujia, jotka ohjelmoija määritellyt vakioiksi määreellä final arvoa ei voi muuttaa ohjelmassa, kääntäjä tuottaa virheilmoituksen Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-39 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-40

Numeeriset vakiot int x = 26; // 32-bittinen kokonaisluku long pitka = -110L; // 64-bittinen kokonaisluku int okta = 010; // oktaaliluku (8-järj), alussa 0 int heksa = 0xFF; // heksadesimaaliluku (16-järj) double javadouble1 = 5.678; // 64-bittinen liukuluku float javafloat1 = 5.678f; // 32-bittinen liukuluku double javadouble2 = 1.1e5; // liukuluku eksponenttimuodossa, 1.1 * 10 5 float javafloat2 = 1.1E5f; // lyhyt liukuluku eksponenttimuodossa Liukulukuvakion (desimaalilukuvakion) oletustyyppinä aina double Kun halutaan ilmaista, että vakion tyyppi on float, on käytettävä f-loppuliitettä Kannattaa käyttää aina double-tyyppiä float säästää hieman muistia, mutta sen huonompi tarkkuus voi aiheuttaa helpommin laskuvirheitä Merkkivakiot / Merkkijonovakiot Merkkivakio Tyyppinä char, Unicode-merkkejä Esitetään heittomerkeissä, tai Unicode-koodina '\u9999, missä 9999 on merkikoodin numeerinen arvo char ch = 'K'; ch = '\n'; char ääkirjain = '\u00c4'; Merkkijonovakio Tyyppinä String Lainausmerkkeihin kirjoitettuja Unicode-merkeistä muodostuvia peräkkäisten merkkien kokoelmia String kieli = "Java"; String kirja = "Docendo"; System.out.println("Suomi Finland"); Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-41 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-42 Eräitä erikoismerkkejä Merkki Selitys Unicodekoodi \b Askelpalautin (backspace) \u0008 \n Rivinvaihto (newline) \u000a \r Palautus rivin alkuun (carriage return) \u000d \t Sarkain (tabulator) \u0009 \\ Kenoviiva \u005c \' Puolilainaus- eli heittomerkki \u0027 \" Lainausmerkki \u0022 \030 Oktaaliluku Totuusarvot ja null-vakio Totuusarvovakiot Tyyppinä boolean Sallitut arvot true ja false Nollaviite-vakio Käytetään oliomuuttujan arvona silloin, kun oliomuuttuja ei viittaa mihinkään olioon, mutta arvo on silti määritelty Sallittu arvo: null Huomaa, että kenoviivaa käytetään poistamaan sitä seuraavan merkin alkuperäinen Java-syntaksin mukainen merkitys System.out.println("\"Takuulla\",\nsanos Tamppereen likka."); "Takuulla", sanos Tamppereen likka. Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-43 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-44 Nimetyt vakiot Ohjelmoijan itse määräämiä, vakiona pysyviä muuttujia, jotka saavat arvonsa esittelynsä yhteydessä Tapana kirjoittaa Esittely ja määrittely final-avainsanan avulla isoilla final int KILPAILIJOIDEN_LUKUMÄÄRÄ = 50; final char LOPETUSMERKKI = 'X'; final String KUSTANTAJA = "Docendo"; Jos vakiomuuttujan arvoa yrittää muuttaa ohjelmassa, kääntäjä antaa ohjelmoijalle virheilmoituksen Luokan sisällä vakioon voi viitata suoraan sen nimellä, luokan ulkopuolella käytettävä luokan nimeä, pistettä ja vakion nimeä (sama sääntö kuin muillekin julkisille tunnuksille) Esim. vakio pii sijaitsee luokassa Math nimellä PI, viittaus nimellä Math.PI public class TulostaEuroVuosi { TulostaEuroVuosi.java final int EURON_KÄYTTÖÖNOTTOVUOSI = 2002; private static void tulostavuosi() { System.out.print ("Eurosta tuli käteisvaluutta vuonna "); System.out.println(EURON_KÄYTTÖÖNOTTOVUOSI); public static void main(string args[]){ tulostavuosi(); Vrt. kirja s. 41 public class Ympyrä { final double OMA_PII = 3.14; double r = 2.5; double ala; Ympyrä.java ala = OMA_PII * r * r; System.out.println("Ympyrän pinta-ala omalla piillä " + ala); ala = Math.PI * r * r; System.out.println("Ympyrän pinta-ala Javan piillä " + ala); kirja s. 47 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-45 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-46 Laskutoimitukset Laskulausekkeet Operaattorit Lue kirjasta s. 41-45 Lähes jokaisessa ohjelmassa lasketaan jotain Laskutoimitukset ovat ohjelmointiteknisesti lausekkeita, aritmeettisia lausekkeita <operandi> <aritmeettinen operaattori> <operandi> Aritmeettinen lauseke sisältää operandeja ja operaattoreita operaattorit (esim. +,-,*,/) kuvaavat matemaattisia laskutoimituksia laskutoimitukset kohdistuvat operandien arvoihin, joita ovat muuttujien ja vakioiden arvot sekä metodien palauttamat arvot Tavallisesti aritmeettisen lausekkeen tulos sijoitetaan jonkun muuttujan arvoksi sijoitusoperaattorilla (=, "saa arvokseen") y = 2 * (x+1); tai sitä käytetään metodin parametrina teejotain(2 * y + z); Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-47 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-48

Aritmeettiset operaattorit Kaksioperandiset (binääriset) operaattorit yhdistävät kaksi operandia lausekkeessa 4 * 5 kertomerkki on binäärinen operaattori 4 ja 5 ovat operandeja Yksioperandiset (unaariset) operaattorit vaativat vain yhden operandin esim. lauseke i++ kasvattaa i:n arvoa yhdellä ++-operaattori kohdistuu muuttujaan (operandiin) i Javan aritmeettiset operaattorit Operaattori - Unaarinen etumerkki Selitys ++, -- Unaarinen kasvatusoperaattori ja vähennysoperaattori +, - Yhteenlasku, vähennyslasku *, /, % Kertolasku, jakolasku, jakojäännös (modulo) +=, -= Lisäysoperaatio, vähennysoperaatio Esimerkkejä int x = 1; // esittele ja alusta ykköseksi x++; // kasvata yhdellä: 2 ++x; // kasvata yhdellä: 3 x--; // vähennä yhdellä: 2 --x; // vähennä yhdellä: 1 x += 1; // kasvata yhdellä: 2 x -= 1; // vähennä yhdellä: 1 x *= 10; // kerro vanha arvo 10:llä ja sijoita uudeksi arvoksi: 10 x /= 2; // jaa arvo 2:llä ja sijoita uudeksi arvoksi: 5 x %= 2; // jaa arvo 2:lla ja sijoita uudeksi arvoksi jakojäännös: 1 *=, /=, %= Kertolaskuoperaatio, jakolaskuoperaatio, jakojäännösoperaatio Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-49 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-50 Prefix ja postfix- muodot Jos unaarinen operaattori ++ tai -- on ennen muuttujan tunnusta, operaatio suoritetaan ennen kuin muuttujaa käytetään lausekkeessa Jos unaarinen operaattori ++ tai -- on muuttujan nimen jälkeen, operaatio suoritetaan vasta, kun muuttujaa on käytetty lausekkeessa int x = 0; System.out.println(x++); // tulostaa 0 x on kasvanut arvoon 1 System.out.println(++x); // tulostaa 2 x on kasvanut arvoon 2 Numeeriset tyypit lausekkeissa Kaikki operaatiot kokonaislukujen ja reaalilukujen välillä sallittuja Tulos on tarkin tyyppi, joka mukana laskutoimituksessa, ja tuloksen tyyppi määritetään ennen mahdollista sijoitusta double r = 15.543; int i = 10; double s = i / 4; // Huom: tulokseksi tulee 2, ei 2.5! double s = i / 4.0; // nyt tulokseksi tulee 2.5 double t = r * i; // OK! double on "tarkempi" Tyyppimuunnos (cast) tehdään antamalla kohdetyyppi suluissa, jonka jälkeen tulee muuttuja (tai lauseke): double r = 15.543; int i; i = (int)r; // i:n arvoksi tulee 15 i = (int)(r + 2.5); // i:n arvoksi tulee 17 Numeeristen tyyppien välinen tyyppimuunnos voi kadottaa tietoa (esim. double-tyypin muunnos int-tyypiksi) Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-51 Ohjelmoinnin perusteet / Auvo Häkkinen / S2012 2-52