1 Ehtolausekkeet Ehdot, valintalausekkeet Boolean-algebra.

Slides:



Advertisements
Samankaltaiset esitykset
15. Loogiset operaatiot.
Advertisements

@ Leena Lahtinen Helia Ohjelman perusrakenteet 1. PERÄKKÄISRAKENNE 2. VALINTARAKENNE 3. TOISTORAKENNE.
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
JavaScript (c) Irja & Reino Aarinen, 2007
Ohjelman perusrakenteet
Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1
Rakenteinen ohjelmointi
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
22. Taulukot.
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
© Jukka Harju, Jukka Juslin
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
© Jukka Harju, Jukka Juslin1 Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Ehto- ja toistolauseet.
TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ VARTEN.
Ehto- ja toistolausekkeet
Ehto- ja toistolauseet
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.
© Jukka Harju, Jukka Juslin1 Tuloksellinen Java-ohjelmointi Luku 4 Ehto- ja toistolauseet Tuloksellinen Java-ohjelmointi.
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.
Ohjelman perusrakenteet
13. Hyvä ohjelmointitapa (osa 1)
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 2 Ensimmäiset ohjelmat © Jukka Harju, Jukka Juslin.
7. Oliot ja viitteet.
Java Java on Sun Microsystems yhtiön kehittämä laaja olio-pohjainen ohjelmointikieli, joka on laitteistoriippumaton. Laitteistoriippumattomuudessa on.
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
String-vertailusta ja Scannerin käytöstä (1/2)
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.
11. Javan toistorakenteet
20. Javan omat luokat.
XNA peliohjelmointi. XNA Perustuu Microsoftin kehittämään.NET- arkkitehtuuriin ja C#-kieleen. XNA:lla tehdyt pelit toimivat Windows ja XBOX360-alustoilla.
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op
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.
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Ä.
RAKENNUSPALIKOITA SEINÄJOEN KANSALAISOPISTO Jussi Rasku Aki Sirviö.
2. Lisää Java-ohjelmoinnin alkeita
Tuloksellinen Java-ohjelmointi Luku 2 Ensimmäiset ohjelmat
Antti-Jussi Lakanen Nuorten peliohjelmointi 2009 / Jyväskylän yliopisto.
Kontrollirakenteet laajemmin
Javan oliovirrat eli oliotiedostojen käsittely. Olio- eli objektitiedostojen käsittely Käsittely täysin samanlaista kuin muiden tiedostojen 1.Otetaan.
14. Poikkeukset Sisällys Johdanto poikkeuksiin. Poikkeusten käsittely: − Poikkeusten käsittely paikallisesti. − Poikkeusten heittäminen. Exception.
Javan perusteet ,5 ov Tomi Keinonen
Valintarakenne valintarakenne alkaa aina kysymyksellä eli ehdolla ehto tarkoittaa, että muuttujan sisältöä verrataan toisen muuttujan sisältöön tai vakioon.
While-toistolause while-lause on alkuehtoinen toistolause. Alkuehtoista toistolausetta käytettäessä järjestelmä päättelee ehtolausekkeen arvon ensin ja.
17. Javan omat luokat.
13. Loogiset operaatiot.
if-else -vertailulause
7. Näytölle tulostaminen
do-while -toistolause
Toisto Toistolausekkeet for, while(ehto){…} ja do {…} while(ehto)
do-while -toistolause
9. Aritmeettiset operaatiot
10. Javan ohjausrakenteet
16. Ohjelmoinnin tekniikkaa
14. Hyvä ohjelmointitapa.
11. Javan valintarakenteet
7. Näytölle tulostaminen
Kontrollirakenteet laajemmin
13. Loogiset operaatiot.
Ohjelman perusrakenteet
eli oliotiedostojen käsittely
16. Ohjelmoinnin tekniikkaa
Esityksen transkriptio:

1 Ehtolausekkeet Ehdot, valintalausekkeet Boolean-algebra

2 Vertailulauseet ==yhtäsuuruus !=erisuuruus <pienempi <=pienempi tai yhtäsuuri >suurempi >=suurempi tai yhtäsuuri Esimerkkejä: int i=7; int j=10; Jolloin: i < j == true i >= j == false i != j == true

3 Vertailulauseet  Huomaa ero sijoitusoperaatiolla ja vertailuoperaatiolla:  ”=” Sijoitusoperaatio  ”==” Vertailuoperaatio  Esimerkki  j = 1; // j saa arvokseen yksi  j == 1 // onko j:n arvo yksi?

4 Vertailulauseet  Suuremmuutta ja pienemmyyttä tutkivilla operaatioilla voi vertailla vain numeerisia lausekkeita  Yhtäsuuruus ja erisuuruus ovat käytössä muidenkin arvojen vertailuissa  Esimerkki double d=0.1; double e=0.2; String auto(”Auto”); String bussi(”Bussi”); d < e == true // Sallittu auto < bussi // Ei sallittu! // Sallittu, mutta ei suositeltu sisällön // vertailuun auto != bussi

5 if-lauseke  Ohjelmassa voi olla valintalauseita: if (ehto) { // tee jotain } else { // tee jotain muuta }

6 if-lauseke  ehdon tulee aina olla jokin totuusarvo  jos totuusarvo on tosi, suoritetaan if- lauseketta seuraava lohko  jos totuusarvo on epätosi, suoritetaan else-lausekkeen jälkeinen lohko (jos sellainen on olemassa)  else-osassa voi olla uusi if-lauseke (else if)

7 if-lauseke – esimerkki 1 public void isPositive(int i) { System.out.println(”Luku ” + i ); if (i>0) System.out.println(” on positiivinen.”); else if (i<0) System.out.println(” on negatiivinen.”); else System.out.println(” on nolla.”); }

8 Lohkot  Jos valintavaihtoehto koostuu useammasta lauseesta, lauseet on koottava yhteen lohkoksi  Lohko on merkkien ”{” ja ”}” välisten lauseiden jono  Lohkon viimeisen aaltosulun jälkeen ei käytetä puolipistettä.

9 if-lauseke – esimerkki 2 public void isPositive(int i) { System.out.println(”Luku ” + i ); if (i>0) { System.out.println(” on positiivinen.”); doSomething(i); } else if (i<0) System.out.println(” on negatiivinen.”); else System.out.println(” on nolla.”); }

10 if-lauseke – moniselitteisyys?  if-lauseeseen ei ole pakko liittyä else-osaa, jonka vuoksi tulee huomata mihin mikäkin else-osa liittyy  Esimerkki if (a<b) if (c<d) e=f; else g=h; // Tarkoittaako tämä: if (a<b) if (a<b) if (c<d) if (c<d) e=f; e=f; else else g=h; g=h;  Sääntö: else-osa liittyy aina lähimpään edeltävään if- lauseeseen

11 Totuusarvojen yhdistely  Totuusarvoilla voi laskea:  (a == b) // a ja b yhtäsuuret  (a != b) // a erisuuri kuin b  (a && b) // a ja b tosia  (a || b) // a tai b  (!a) // a epätosi  Edellä esiteltyjä voi yhdistellä, esimerkiksi:  (a || b) && (c || d) // a tai b ja c tai d

12 switch-lauseke  switch-lausekkeella voi olla eri haaroja  switch soveltuu paikkoihin, joissa on tarvetta käsitellä monia eri numeroarvoihin perustuvia haaroja  switch-lausekkeessa voi olla default-haara, joka suoritetaan mikäli yksikään muu haara ei toteudu  switch-lausekkeessa on muistettava break:n käyttö (kts. seuraava esimerkki). break:lla poistutaan switch-lauseesta.

13 switch-lauseke - esimerkki public void printNumber(int i) { switch(i) { case 0: System.out.println(”nolla”); break; case 1: System.out.println(”yksi”); break; default: System.out.println(”ei yksi eikä nolla”); break; }

14 boolean-perustietotyyppi  Totuusarvo voidaan sijoittaa boolean- tyyppiseen perustietotyyppiin boolean isBigger = (a>b); if (isBigger) System.out.println(”a is bigger than b”); else System.out.println(”a isn’t bigger than b”);

15 Toisto Toistolausekkeet for, while(ehto){…} ja do {…} while(ehto) Toistorakenteista poistuminen ja niiden sisällä siirtyminen

16 Esiehtoinen toistorakenne  while (ehto) { /* suoritettava koodi */ }  Esimerkki: int powerOfTwo = 2; while (powerOfTwo < 10) { System.out.println(”Next power: ” + powerOfTwo); powerOfTwo *= 2; }

17 Esiehtoinen toistorakenne  Toistorakennetta suoritetaan niin kauan kun annettu ehto on tosi ( true )  Mikäli ehto ei ole aluksikaan tosi, ei toistorakennetta suoriteta kertaakaan

18 Jälkiehtoinen toistorakenne  do { /* suoritettava koodi */ } while (ehto);  Esimerkki: boolean mayExit = false; do { System.out.println(”Syötä luku (1-9) : ”); int userValue = Lue.kluku(); if (userValue>0 && userValue<10) mayExit = true; } while (!mayExit);

19 Jälkiehtoinen toistorakenne  Toistorakenne suoritetaan vähintään yhden kerran  Seuraavalle suorituskerralle siirrytään, mikäli annettu ehto on tosi

20 for-toistorakenne  for (alustus;jatkamisehto;lisäyslauseke) { /* suoritettava koodi */ }  Käyttö järkevää kun toistojen lukumäärä on ennakkoon tiedossa  Esimerkki for (int i=0;i<10;i++) { System.out.println(”Luku ” + i); }

21 for-toistorakenne 1)suoritetaan yhden kerran 2)suoritetaan joka kierroksella, jos totuusarvo on false, toistorakenteen suoritus päättyy 3)suoritetaan joka kierroksen lopuksi ennen seuraavan kierroksen kohdan (2) tarkastusta for (int i=0;i<10;i++) { System.out.println(”Luku ” + i); } (1)(2)(3) Tuloste Luku 0 Luku 1 Luku 2 Luku 3 Luku 4 Luku 5 Luku 6 Luku 7 Luku 8 Luku 9

22 break ja continue toistorakenteissa  Kaikissa edellä esitellyissä toistorakenteissa voidaan käyttää break- ja continue -lausekkeita:  break -lauseke poistuu toistorakenteesta  continue -lauseke siirtyy suoraan seuraavalle suorituskerralle  turhaa käyttöä kannattaa välttää

23 break ja continue - esimerkki for (int i=0;i<10;i++) { if (i==5) continue; else if (i==8) break; System.out.println(”Kierros ” + i); } hyppy seuraavalle kierrokselle, mikäli jatkoehto 1 toteutuu, lisäyslauseke 2 suoritetaan kuten normaalisti (1)(2) poistutaan suoraan for-lausekkeesta Tuloste: Kierros 0 Kierros 1 Kierros 2 Kierros 3 Kierros 4 Kierros 6 Kierros 7

24 ehtojen asettaminen  Kaikissa toistorakenteissa käytetään jotakin ehtoa, joka kertoo milloin suoritus lopetetaan  Ehdot kannattaa asettaa mahdollisimman rajaaviksi, esimerkiksi: public void printNumbers(int count) { for (int i=0;i<count;i++) { System.out.println(”Luku ” + i); } ei i!=count, koska silloin esim. luvulla –1 kutsuttaessa suoritus ei päättyisi ikinä  Ikuisten toistojen välttäminen em. ohjelmointityylillä on hyvä tapa

25 Java 2 API Dokumentaatio Paketit Käyttö

26 Java 2 API  Java 2 API (Application Programming Interface) tarjoaa runsaasti valmiita luokkia käytettäväksi ohjelmissa  Math – lukujen käsittely  String – merkkijono ja sen käsittely  StringTokenizer – merkkijonon pätkiminen ...  Luokkien käyttöohjeet löytyvät käytetyn Java- version API-dokumentaatiosta:

27 Paketit  Paketilla tarkoitetaan samantyyppisten luokkien muodostamaa kokonaisuutta  Luokan (käännösyksikön) paketti määritellään tiedoston alussa: package paketin_nimi;  Ellei tiedoston alussa ole package-määrettä, class-tiedosto asetetaan nimettömään pakkaukseen  Luokan kuuluminen alipakettiin ilmaistaan: package paketin_nimi.alipaketti;

28 Paketit  Pakettiin kuuluminen tarkoittaa että luokkaa käytettäessä sen edessä on käytettävä pakkauksen nimeä: pakkaus.Luokka x = new pakkaus.Luokka();  Käytännössä on järkevämpi käyttää aina import-lausekkeita // Sallii pakkaus1:n kaikkien luokkien käytön import pakkaus1.*; // Sallii pakkaus1:n luokan Auto käytön import pakkaus1.Auto;  import-lausekkeet kirjoitetaan tiedoston alkuun mahdollisen package-määrityksen jälkeen  Tiedostosta käy selkeästi ilmi mitä pakkauksia se käyttää

29 Java 2 API  Kaikki Java 2 API:n luokat on sijoitettu paketteihin  java.lang  java.math  java.io ...  Paketti, johon luokka kuuluu selviää API- dokumentaatiosta  Kaikkiin tiedostoihin tuodaan automaattisesti Javan pakkaus java.lang. (import java.lang.*;)

30 Metodit Metodin muoto Määreet Staattiset metodit ja attribuutit Arvotyyppi Parametrit Kuormittaminen Rekursio

31 Metodit  Alialgoritmit (aliohjelmat) toteutetaan metodeissa  Metodeilla voi olla parametreja (lähtötiedot) ja se voi palauttaa jonkin arvon  Metodien käyttö  olioiden luonti (konstruktori)  piilossa olevan tiedon kysely ja käyttö (aksessorit)  algoritmit  pääohjelmametodi ”public static void main(String[] args)”

32 Metodit – Muoto määreet arvotyyppi nimi(parametrit) { algoritmi }  Määreillä ohjataan metodin käyttömahdollisuuksia  Arvotyyppi kertoo minkä tyyppisen arvon metodi palauttaa  Nimi yksilöi metodin  Parametrit ovat metodin muuttujia, jotka metodin kutsuja antaa  Algoritmi toteuttaa metodin tehtävän  Esimerkki: public static void printString(final String str) { System.out.println(str); }

33 Metodit – Muoto  Konstruktoreilla ei ole paluuarvoa public Student(String name) {...} public Car() {...}  Konstruktori ei voi olla staattinen (static)  Konstruktori voi olla normaalin public- näkyvyysalueen lisäksi myös private  Milloin järkevää käyttää?

34 Metodit - Määreet  Määreitä ovat  Näkyvyysalueet  publicsallii metodin käytön kaikkialta  protectedsallii metodin käytön luokalta perityissä luokissa  privatesallii metodin käytön ainoastaan luokan sisällä  Muut  abstractmetodilla ei ole toteutusta (abstrakti)  staticmetodin kutsumiseen ei tarvita oliota  finalmetodia ei voi ylikirjoittaa perityissä luokissa  syncronizedmetodia suoritetaan monisäikeisessä sovelluksessa yksi kutsu kerrallaan  nativemetodilla ei toteutusta, kutsu esim. C/C++  Kurssilla tarvittavat määreet: public, private, static

35 Metodit - Määreet  Esimerkkejä määreistä  ”public static void main(String [] args)”  ”private int solveSubProblem()”  ”public int solveProblem()”  ”public void initializeObject()”

36 Metodit – määreet – static  Yleensä luokan sisään kirjoitetut metodit käyttävät jotain olion attribuuttia  On olemassa kuitenkin myös metodeja, jotka eivät tarvitse olion attribuutteja tai kutsu toisia olion attribuutteja käyttäviä metodeja (esim. Math-luokan metodit)  Kyseiset metodit eivät näin ollen tarvitse olemassa olevaa oliota suoritukseensa  Tällaisia metodeja kutsutaan staattisiksi

37 Metodit – määreet – static  Metodi määritellään staattiseksi static- määreellä: public static double sqrt(double num)  static-määreellä määriteltyä metodia voidaan kutsua luokan ulkopuolelta ilman olion luontia: double result = Math.sqrt(16); Luokan nimi, jossa metodi on määritelty

38 Staattiset attribuutit  Attribuutteja voidaan määrittää myös staattisiksi.  Staattinen attribuutti on käytettävissä ilman olion luontia.  Staattista attribuuttia voi käyttää kuten normaaliakin luokan attribuuttia.  Staattinen attribuutti on sama joka paikassa (vrt. ei-staattiset attribuutit, jotka ovat yksilölliset jokaisella luodulla oliolla)

39 Staattiset metodit ja attribuutit  Staattiset metodit/attribuutit ovat käyttöalueeltaan rajatumpia kuin ei- staattiset  Hyvän ohjelmointitavan mukaista on määrittää metodi/attribuutti staattiseksi aina kun se on mahdollista  Käytännössä varsinkin staattisten attribuuttien käyttö on harvinaista

40 Staattiset metodit ja attribuutit  Esimerkkejä:  main-metodin on aina oltava staattinen  Vakiot määritetään yleensä staattisina: private final static int NUM_COLS = 5;  Color-luokan määritellyt värit ovat staattisia public final static Color black = new Color(0,0,0);  Math-luokan kaikki metodit ja attribuutit ovat staattisia

41 Staattiset metodit ja attribuutit public class TestApp { public static final int A = 1; public final int B = 2; private static int C = 3; private int D = 4; public TestApp() { } public static void setValues() { C = A; A = C; D = C; setMemberValues(); } public void setMemberValues() { C = A; D = C; setValues(); } Luokan ulkopuolelta: TestApp.setValues(); int i = TestApp.A; i = TestApp.B; i = (new TestApp()).B; (new TestApp()).setValues(); (new TestApp()).setMemberValues(); // Sallittu, koska A ja C staattisia // Ei sallittu, koska A on vakio (final) // Ei sallittu, koska D ei staattinen // Ei sallittu, koska ollaan staat. metodissa // Sallittu // Sallittu, koska ei olla staattisessa metodissa // Sallittu //OK //Ei sallittu //OK