12.1 12. Näppäimistöltä lukeminen. 12.2 Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In -luokka.

Slides:



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

15. Loogiset operaatiot.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
© Jukka Harju, Jukka Juslin1 Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 6 (osittain) Tiedostot.
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.
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Yksinkertaiset graafiset syöttö- ja tulostustoiminnot.
© 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.
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.
13. Hyvä ohjelmointitapa (osa 1)
© Jukka Harju, Jukka Juslin
7. Oliot ja viitteet.
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)
11. Javan toistorakenteet
19. Olio-ohjelmointia Javalla
20. Javan omat luokat.
Kuinka niitä käsitellään
1 DataOutputStream ja DataInputStream DataOutputStream:lla voidaan tallentaa perustietotyyppien arvoja binäärimuotoiseen tiedostoon DataInputStream:lla.
HelloWorld-ohjelma. 5.2 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi.
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.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
22. Taulukot.
© Jukka Juslin1 Tiedostot Tuloksellinen Java-ohjelmointi.
17. Kooste Kooste Kooste (aggregation) on luokkien A ja B välinen suhde, joka tarkoittaa “A on B:n osa” tai “A kuuluu B:hen”. − Koostesuhteessa.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
@ Leena Lahtinen TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA:  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ.
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely.
2. Lisää Java-ohjelmoinnin alkeita
Tiedostojen käsittely
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.
Tiedostot. 8.2 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen.
String-vertailusta ja Scannerin käytöstä (1/2)
5. Kapselointi.
6. Tiedostot.
1. Omat operaatiot.
13. Pakkaukset.
14. Poikkeukset.
Kuinka niitä käsitellään
17. Javan omat luokat.
8. Näppäimistöltä lukeminen
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
5. HelloWorld-ohjelma.
7. Näytölle tulostaminen
19. Tietovirrat.
8. Näppäimistöltä lukeminen
Kuinka niitä käsitellään
14. Hyvä ohjelmointitapa.
13. Pakkaukset.
4. Attribuutit.
14. Poikkeukset.
7. Näytölle tulostaminen
5. HelloWorld-ohjelma.
3. Attribuutit.
14. Poikkeukset.
13. Pakkaukset.
4. Luokan testaus ja käyttö olion kautta
eli oliotiedostojen käsittely
Esityksen transkriptio:

Näppäimistöltä lukeminen

12.2 Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In -luokka. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner -luokka.

12.3 Yleistä Näppäimistöltä annettujen arvojen (syötteiden) lukeminen on periaatteessa helppoa: − Lukuoperaation kohdatessaan ohjelman jää odottamaan käyttäjän syötettä. − Näppäimistöltä annettu syöte lähetetään ohjelmalle Enter-näppäintä painamalla. − Ohjelman suoritus jatkuu syötteen lähetyksen jälkeen. Ongelma: lukuoperaatio odottaa saavansa tietyn tyyppisen arvon, mutta ohjelman käyttäjä voi antaa syötteeksi jotain muuta tyyppiä olevan arvon.

12.4 Yleistä Esim. Ollaan lukemassa kokonaislukua ja käyttäjä syöttää syystä tai toisesta ohjelmalle liukuluvun. Jos lukuoperaatio ei pysty muuttamaan syötettä halutun tyyppiseksi, tapahtuu usein ajonaikainen virhe (runtime error). Ajonaikainen virhe pysäyttää ohjelman suorituksen, ellei siihen ole varauduttu lukuoperaation yhteydessä.

12.5 Javassa Lisävaikeuksia aiheuttaa itse Java-kieli, jossa tietojen lukeminen näppäimistöltä on vaikeaa. Uusimmissa Java-versioissa (≥ 1.5.0) lukeminen on helpompaa, mutta Scanner -luokan operaatiot ovat virheenkäsittelyn osalta valitettavan yksinkertaisia. Koska ajonaikaisista virheistä selviäminen vaatii edistyneempiä Java-taitoja, Laki-kurssilla lukemiseen käytetään pääasiassa omatekoista In - luokkaa, jonka operaatioihin virheidenkäsittely on koodattu valmiiksi.

12.6 In -luokka Luokka sisältää operaatiot: − readInt () int -tyyppisen kokonaisluvun lukemiseen − readDouble () double -tyyppisen liukuluvun lukemiseen − readString ()merkkijonon (String) lukemiseen ja − readChar ()merkin ( char ) lukemiseen. Nämä operaatiot eivät luovuta helpolla: lukemista jatketaan kunnes on saatu kelvollinen syöte. Luokka löytyy kurssin kotisivuilta Harjoitustyö- kohdasta.

12.7 In -luokka Operaatioita kutsutaan pistenotaatiolla, joka on tuttu jo tulostamisen yhteydessä: In. operaatio Esim. double d = In.readDouble(); if (In.readChar() == 'k') {... } Lukuoperaation palauttama arvo sijoitetaan usein muuttujaan, jonka on oltava luonnollisesti sopivaa tyyppiä. Paluuarvoa voidaan myös käyttää myös suoraan lauseen osana.

12.8 In -luokka Näppäimistöltä annettu syöte saadaan ohjelmaan lukuoperaation paluuarvona. Ohjelmassa tulostusoperaation parametriksi annettu arvo tulostetaan näytölle. … int n = In.readInt(); System.out.println(n); … int n = In.readInt(); System.out.println(n); … 10

12.9 In -luokka In -luokka on käännettävä yhdessä oman ohjelman (luokan) kanssa. Tämä on tehtävissä eri tavoin. Luokan voi kopioida samaan hakemistoon kuin oman ohjelman, jolloin ohjelmaa käännettäessä myös In -luokka kääntyy. Esimerkki: javac Tehtavat.java Nyt ohjelma on ajettavissa tutulla komennolla: java Tehtavat

12.10 In -luokka In -luokan voi sisällyttää käännökseen myös jostakin muusta hakemistosta joko polkumäärittelyllä tai javac-ohjelman sourcepath -parametrillä. Esim. Oletetaan, että In -luokan lähdekoodi löytyy Windows-käyttöjärjestelmässä työhakemiston ylihakemistosta. Tällöin Tehtavat -ohjelma voidaan kääntää vaihtoehtoisesti komennoilla: javac Tehtavat.java..\In.java (UNIX: javac Tehtavat.java../In.java ) tai javac -sourcepath.. Tehtavat.java

12.11 In -luokka Muussa kuin nykyisessä hakemistossa sijaitseva In - luokan tavukoodi sisällytetään ohjelman suoritukseen classpath -parametrillä. Esim. Oletetaan, että In -luokan tavukoodi löytyy Windowsissa työhakemiston ylihakemistosta. Tällöin ohjelma suoritetaan komennolla: java -classpath.;.. Tehtavat (Linux: java -classpath.:.. Tehtavat )

12.12 Syötteen tarkistaminen Vaikka syöte olisi oikeaa tyyppiä, se ei ole välttämättä oikeellinen: Usein on tarpeen lukea arvo tietyltä arvoalueella. Esim. Jos käsitellään henkilön pituutta ja painoa, syötearvojen tulisi olla positiivisia. Usein ohjelma yrittää “pakottaa” käyttäjänsä antamaan oikeellisen arvon silmukan avulla. do-while -rakenne on tässä tehtävässä erityisen hyödyllinen.

12.13 Syötteen tarkistaminen Idea pseudokoodina: do { Lue syöte; Jos syöte virheellinen, niin ilmoita käyttäjälle. } while (syöte virheellinen); Syötteen oikeellisuus voidaan ilmaista joko loogisella lausekkeella tai lippumuuttujalla, joka on usein boolean - tyyppinen. − Lippumuuttujan käsite on venyvä. Lippuarvo määritellään usein ohjelmalle tuntemattomaksi arvoksi, jolla lopetetaan silmukan suoritus.

12.14 Tietovirrat Usein ajatellaan abstraktisti, että ohjelma kommunikoi ympäristönsä kanssa tietovirtojen (data stream) avulla. Tyypillisesti käytettävissä ovat standarditulos-, standardisyöte- ja -standardivirhevirrat. Tulos- ja virhevirrat liittyvät oletusarvoisesti näyttöön ja syötevirta näppäimistöön. Javassa standardivirtojen tunnukset ovat System.out, System.in ja System.err.

12.15 Tietovirrat System.out-virta tuttu tulostamisoperaatioiden yhteydestä. In -luokan operaatiot liittyvät System.in-virtaan. … int n = In.readInt(); System.out.println(n); … int n = In.readInt(); System.out.println(n); … In System.in System.out

12.16 Ohjausmerkit Komentoikkunassa standardisyöte- ja standarditulostevirrat voidaan liittää väliaikaisesti tiedostoihin ohjausmerkeillä. Uudelleenohjaus toimii Windows- ja UNIX- komentoikkunoissa. Pienempi kuin -merkillä ( < ) ohjelma lukee syötteet tiedostosta näppäimistön asemasta. Esim. java OmaOhjelma < syote.txt Syötetiedostossa kukin syöte on omalla rivillään.

12.17 Ohjausmerkit Suurempi kuin -merkillä ( > ) ohjelma tulostaa tiedostoon näytön asemasta. Esim. java OmaOhjelma > tulos.txt Kannattaa tarkastaa, että tiedostossa ei ole mitään tärkeää, koska tiedoston vanha sisältö menetetään! Ohjausmerkkejä voidaan myös käyttää yhdessä, jolloin syötteet tulevat tiedostosta ja tulosteet menevät tiedostoon. Esim. java OmaOhjelma tulos.txt

12.18 Scanner -luokka Sisältää yksinkertaisia metodeja (esim. nextInt (), nextDouble (), nextLine (), nextBoolean ()) näppäimistöltä tai tiedostosta lukemiseen. char -tyypille ei ole omaa lukumetodia: Scanner sc = new Scanner(System.in); char merkki = sc.nextLine().charAt(0); Löytyy Javan uusimmissa versioissa (≥ 1.5.0) java.util -pakkauksesta: import java.util.*; Virheenkäsittely hoidettava try-catch -lauseilla.

12.19 Scanner -luokka import java.util.*; // Otetaan Scanner-luokka käyttöön import-lauseella. public class ScannerDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // Liitetään oletussyötevirtaan. try { // Yritetään lukea kokonaisluku. System.out.print("Anna luku: "); int luku = sc.nextInt(); } catch (Exception e) { // Jos tapahtui virhe, niin se "siepataan" tänne. System.out.println("Tapahtui virhe: " + e); } // Suljetaan. sc.close(); }