Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4



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

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

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

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

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

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Java-kielen perusteita

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

14. Poikkeukset 14.1

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

14. Poikkeukset 14.1

7. Näytölle tulostaminen 7.1

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

Metodien tekeminen Javalla

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

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

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

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

1. Omat operaatiot 1.1

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

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

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

5. HelloWorld-ohjelma 5.1

12. Javan toistorakenteet 12.1

17. Javan omat luokat 17.1

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

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

Pakkauksen kokoaminen

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

5. HelloWorld-ohjelma 5.1

11. Javan toistorakenteet 11.1

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

Poikkeustenkäsittely

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

Java-kielen perusteita

Listarakenne (ArrayList-luokka)

20. Javan omat luokat 20.1

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

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

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

Taulukoiden käsittely Javalla

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

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

Rajapinta (interface)

17. Javan omat luokat 17.1

12. Javan toistorakenteet 12.1

Pakkauksen kokoaminen

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

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

Java-kielen perusteet

Ohjelmoinnin perusteet, 1. välikoe

Tietokannat II -kurssin harjoitustyö

19. Olio-ohjelmointia Javalla 19.1

Harjoitus 3 (viikko 39)

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

Ohjelmoinnin perusteet Y Python

Mitä poikkeuskäsittely tarkoittaa?

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

ITKP102 Ohjelmointi 1 (6 op)

public static void main (String [] args)

Olio-ohjelmointi Javalla

Harjoitus 4 (viikko 47)

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

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

7. Oliot ja viitteet 7.1

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Harjoitus 5 (viikko 48)

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

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

Ohjelmoinnin perusteet, kurssikoe

Ohjelmoinnin jatkokurssi, kurssikoe

4. Lausekielinen ohjelmointi 4.1

Luokat ja oliot. Ville Sundberg

Ohjelmointityö 3. Mikko Laamanen

11. Javan valintarakenteet 11.1

Java-kielen perusteet

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

Ohjelmoinnin perusteet Y Python

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 )

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

1 Tehtävän kuvaus ja analysointi

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

11. Javan valintarakenteet 11.1

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Ohjelmoinnin perusteet, syksy 2006

16. Javan omat luokat 16.1

Mikä yhteyssuhde on?

Metodien tekeminen Javalla

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Ohjelmointityö 65 Tekstinmuotoilu ohjelma. Dokumentaatio. Aki Heikkinen (155394)

Java kahdessa tunnissa. Jyry Suvilehto

Ohjelmoinnin perusteet Y Python

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

Harjoitus 2 (viikko 45)

Java-kielen perusteet

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

13. Loogiset operaatiot 13.1

Transkriptio:

Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka. 12.1 12.2 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. 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.3 12.4

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 Inluokkaa, jonka operaatioihin virheidenkäsittely on koodattu valmiiksi. Luokka sisältää operaatiot: readint() int-tyyppisen kokonaisluvun lukemiseen readdouble() double-tyyppisen liukuluvun lukemiseen readstring() readchar() merkkijonon (String) lukemiseen ja 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.5 12.6 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.7 10 int n = In.readInt(); System.out.println(n); 10 Näppäimistöltä annettu syöte saadaan ohjelmaan lukuoperaation paluuarvona. Ohjelmassa tulostusoperaation parametriksi annettu arvo tulostetaan näytölle. 12.8

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 kääntyy. Esimerkki: javac Tehtavat.java Nyt ohjelma on ajettavissa tutulla komennolla: java Tehtavat 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.9 12.10 Muussa kuin nykyisessä hakemistossa sijaitseva Inluokan 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) 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.11 12.12

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 booleantyyppinen. Lippumuuttujan käsite on venyvä. Lippuarvo määritellään usein ohjelmalle tuntemattomaksi arvoksi, jolla lopetetaan silmukan suoritus. 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.13 12.14 Tietovirrat System.in In int n = In.readInt(); System.out.println(n); System.out-virta tuttu tulostamisoperaatioiden yhteydestä. In-luokan operaatiot liittyvät System.in-virtaan. System.out Ohjausmerkit Komentoikkunassa standardisyöte- ja standarditulostevirrat voidaan liittää väliaikaisesti tiedostoihin ohjausmerkeillä. Uudelleenohjaus toimii Windows- ja UNIXkomentoikkunoissa. 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.15 12.16

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 < syote.txt > tulos.txt 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.17 12.18 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(); 12.19