Pääteohjaus 3

Seuraavien harjoitusten tarkoituksena on opettaa ohjelmointiympäristön käyttöä. Itse Java-kielisten ohjelmien syntaksiin ei vielä ole syytä takertua liiaksi.

Tässä harjoituksessa opittavat asiat tulevat hyödyksi ohjelman koodaamisessa ja testaamisessa. Itse ohjelman suunnittelun kanssa tällä harjoituksella ei ole mitään tekemistä!

Java-ohjelmien editointia ja kääntämistä harjoitellaan komentorivillä (mikä tahansa editori käy, esim. ConTEXT tai Notepad), NetBeans IDE 4.0 -sovelluskehittimellä, JBuilder 2005 (tai 7-9 tai X) -sovelluskehittimellä tai Eclipse 4.0 sovelluskehittimellä. Näistä Eclipse, NetBeans ja JBuilder ovat vaihtoehtoisia, osa niistä voidaan jättää pois aikataulun vaatiessa. Komentoriviosuus on pakollinen kaikille.

1. Ohjelman kirjoittaminen ja kääntäminen

Harjoitellaan aluksi Javan käyttöä komentoriviltä. Kun olet käynyt tehtävän läpi komentorivillä, voit kokeilla samaa Eclipsellä, NetBeansilla tai JBuilderilla luettuasi vastaavan editorin käyttöohjeet.

  1. Aukaise yksi komentoikkuna tuplanäpäyttämällä CMD-ikonia (Command prompt, sijaitsee työpöydällä tai Start-valikossa).
  2. Siirry omaan hakemistoosi (hakemiston paikka on C:\MyTemp\ohj2\tunnus. Käytä CD-komentoa hakemistopuussa liikkumiseen). Jos hakemistoa ei ole, luo hakemisto MD-komennolla.
  3. Katso DIR-komennolla mitä tiedostoja on hakemistossa.
  4. Kirjoita jollakin editorilla seuraava Java-ohjelma nimelle Jarj2.java (esim. ConTEXTilla käynnistyy komennolla ct Jarj2.java[RET].
    Jarj2.java
  5. Yritä saada vastaavat sisennykset ja ole tarkkana kirjainten 1 (yksi), i (ii, india) ja l (ällä, lima) suhteen. Myös isojen ja pienten kirjainten kanssa on syytä olla tarkkana! Jos huomaat mallissa kirjoitusvirheitä, niin älä korjaa niitä vielä. Tarkoituksena on opetella tulkitsemaan kääntäjän virheilmoituksia. Mitä luulet ohjelman tulostavan?
  6. Tallenna valmis ohjelma (useimmissa editoreissa [Ctrl-S]).
  7. Siirry takaisin komentokehotteeseen ja käännä ohjelma komennolla javac Jarj2.java[RET].
  8. Mikäli sait ohjelman kirjoitettua aivan vastaavasti kuin mallissa, komentokehotteeseen tulee tekstit:
        Jarj2.java:40: unclosed string literal
            s1 = kysy("Anna 1. merkkijono >');
                      ^
        Jarj2.java:41: ')' expected
            s2 = kysy("Anna 2. merkkijono >");
                                             ^
        Jarj2.java:51: ';' expected
            System.out.println("Jonot "+s1+", "+s2+".")
                                                       ^
        Jarj2.java:48: cannot resolve symbol
        symbol  : variable T
        location: class Jarj2
               s2.append(T);
                         ^
        4 errors
  9. Rivin alussa oleva tieto kuvaa tiedostoa ja rivinumeroa, jossa virhe on löytynyt (esim. Jarj2.java-tiedostossa rivillä 40 on löydetty merkkijono, jota ei ole suljettu "-merkillä.
  10. Monissa tekstieditoreissa on toiminto, jonka avulla pääsee määrätylle ohjelmariville. Esim. ConTEXTissa [Ctrl-G] (Edit->Go to...) tuo esiin ikkunan, johon voit syöttää haluamasi rivinumeron. Etsi toiminto tekstieditoristasi ja kokeile sitä.
  11. Siirry ensimmäisen virheen kohdalle ja paina [RET].
  12. Korjaa virhe! Virhe ei välttämättä ole kursorin kohdalla, vaan se vasta paljastuu siinä kohdassa. Sama virhe saattaa poikia useita eri virheilmoituksia!
  13. Käännä ohjelma uudelleen.
  14. Tallenna korjattu ohjelma.
  15. Siirry takaisin komentokehotteeseen ja aja ohjelma komennolla java Jarj2[RET]. Jos virtuaalikone ilmoittaa
    Exception in thread "main" java.lang.NoClassDefFoundError: Jarj2,
    kokeile komentoa java -cp . Jarj2[RET] (tämä varmistaa, että virtuaalikone yrittää etsiä ajettavaa tiedostoa nykyisestä hakemistosta).
Huom. seuraavissa luvuissa esiteltävät sovelluskehittimet voivat helpottaa huomattavasti ohjelman kehitystä (ne eivät kuitenkaan tee ohjelmaa puolestasi!). Esimerkiksi niiden editorit on suunniteltu tukemaan Java-kieltä ja debuggerilla ohjelmaa voi suorittaa rivi kerrallaan seuraten samalla muuttujien arvoja. Lisäksi sovelluksen dokumentaation luonti helpottuu ja editori osaa tarvittaessa näyttää suoraan Java-kielen ja omien sovellusten Javadoc-tietoja ohjelmoinnin aikana.

Tästä huolimatta jokaisen (Java-)ohjelmoijan on osattava tarvittaessa kääntää ohjelmansa komentoriviltä. Sovelluskehitintä ei ole aina saatavilla tai käytössä olevan koneen teho ei riitä kehittimen tehokkaaseen käyttöön (erityisesti Java-kielen sovelluskehittimet vievät hyvin runsaasti koneen tehoja). Sen sijaan J2SDK-kehitysympäristö (software development kit) on saatavilla kaikille Java-kielen tukemille käyttöjärjestelmille ja komennot java, javac ja javadoc toimivat odotetusti.

Java-ohjelmointi onnistuu myös ilman massiivista sovelluskehitintä. Monet tekstieditorit, kuten ConTEXT (ei kuitenkaan Notepad) tukevat Javan syntaksin automaattista värikoodaudausta. Kehittyneemmillä editoreilla (esim. GNU Emacs) voi määritellä myös omia toimintoja, kuten javac-komennon kutsuminen editoitavalle tiedostolle...

2. Borland JBuilder -editorin käyttöohjeita

Tämä luku on vaihtoehtoinen lukujen 3 ja 4 (NetBeans-editorin tai Eclipse-editorin käyttöohjeita) kanssa.

JBuilder 2005 lähtee mikroluokissa käyntiin komentoriviltä komennolla

jb05

2.1 Ikkunat

JBuilder -ympäristö on suurinpiirtein seuraavan näköinen:

JBuilder

Näyttö koostuu siis pääikkunasta, joka sisältää useampia ali-ikkunoita. Ikkunan kokoa voidaan muuttaa hiirellä tarttumalla kiinni ikkunan reunaan, paikkaa tarttumalla ikkunan otsikkopalkkiin.

Ali-ikkunoiden kokoa voidaan muuttaa pääikkunan sisällä tarttumalla ikkunan reunaan. Hiiren kursori muuttuu kaksipäiseksi nuoleksi, kun olet oikealla kohdalla. Kokeile!

Ikkunasta toiseen voidaan siirtyä joko näpäyttämällä hiirellä ikkunan aluetta tai pikanäppäimellä [Ctrl-TAB].

Kooditiedostosta toiseen siirrytään klikkaamalla vastaavan välilehden painiketta koodieditorin yläpuolella tai Window-valikon kautta ([ALT-W] ja ikkunan numero, johon haluat siirtyä). Koodi-ikkunat on numeroitu 0:sta alkaen vasemmalta ja näkyvät myös Window-valikossa. Kuvassa FileInputSream.java on 0. ikkuna, Jarj3a.java 1. ikkuna jne.
  1. Avaa haluamasi tiedostot [Ctrl-O] ja kokeile ikkunasta toiseen siirtymistä.

2.2 Menut ja pikanäppäimet

Toimintoja voidaan valita joko hiirellä yläreunasta, tai painamalla [F10]) ja siirtymällä kursorilla halutun toiminnon kohdalle. Toiminto voidaan valita myös painamalla toiminnon korostetua kirjainta (esim. [ALT-E] avaa Edit-valikon). Siis vaihtoehtoja on useita. Aluksi menujen käyttö on näppärää nuolinäppäimillä tai hiirellä, mutta haluttaessa tehokkaampaa toimintaa, kannattaa käyttää suoravalintoja.

Kokeillaan Jarj2.java-ohjelman korjausta ja ajamista edellisen luvun tapaan.
  1. Sulje aiemmin avaamasi tiedostot ja mahdollinen JBuilderin oletusprojekti. (File->Close projects, [ALT-A], [RET], älä tallenna muutoksia.)
  2. Aloitetaan uusi projekti ja määritellään asetukset.
    1. Avaa Project Wizard. (File->New Project)
    2. Anna projektille haluamasi nimi ja varmista, että hakemistoksi tulee alkuperäinen työhakemistosi C:\MyTemp\ohj2\tunnus (JBuilder ehdottaa projektin nimistä alihakemistoa, mutta sen voi poistaa).
    3. Paina Next. Project Wizard siirtyy projektin asetussivulle.
    4. Tarkista JDK-tekstiriviltä, että kääntämisessä käytetään uusinta Java-kehitysympäristöä (1.4.1...). Jos ei käytetä, paina komponentin oikealla puolella olevaa ...-nappia ja lisää esille tulevassa ikkunassa New-napilla Project-kohtaan JDK 1.4.1 (jos sitä ei vielä ole) . JDK löytyy Agoran koneilta hakemistosta C:\Program Files\j2sdk1.4.1_01. Valitse ja paina OK-nappia.
    5. Tarkista, että hakemistot ovat oikein. Output path ja Working directory-kohdissa pitäisi molemmissa olla työhakemistosi C:/MyTemp/ohj2/tunnus.
    6. Korjaa lähdekoodihakemisto (ks. ikkunan alaosassa oleva taulukko ja hakemisto, jossa valittu default-radiopainike). Jbuilder yrittää laittaa lähdekoodeja oletuksena src-nimiseen hakemistoon. Muokkaa hakemistoksi työhakemistosi (kuten Output path ja Working directory). Valitse hakemisto ja paina Edit-nappia päästäksesi vaihtamaan hakemiston.
    7. Huom! Lähdekoodiesi on oltava projektin asetuksissa määritellyssä lähdekoodihakemistossa. Muuten JBuilderin debuggeri ei toimi oikein.
    8. Paina Finish. Projekti on luotu.
  3. Lisää Jarj2.java projektiin. (Project->Add files/packages tai pikanappi heti vasemmalla olevan tiedostopuun yläpuolella)
  4. Muuta Jarj2.java alkuperäiseen muotoonsa, jolloin voit kokeilla kääntäjän virheilmoituksia JBuilderilla.
  5. Jotkut virheet näkyvät jo koodia kirjoittaessasi (jopa ilman kääntämistä!) vasemmanpuoleisessa ikkunassa Errors-puussa.
  6. Yritä kääntää ohjelma. ([Ctrl-F9])
  7. Virheilmoitukset tulevat ruudun alaosassa olevaan virheikkunaan. Virheikkunan avulla näkee (likimain!) virheiden paikat ohjelmakoodissa. Virheitä voi selata JBuilderissa klikkaamalla hiirellä virheikkunaa ja liikuttamalla nuolinäppäimillä kursoria ylös ja alaspäin virheikkunassa. Kokeile!
  8. Käyttäessäsi NetBeansia tai JBuilderia huomaat varmaakin, että värit osoittavat jotakin ohjelmakoodissa. Mitä? Värit auttavat paikallistamaan useita virheitä.
  9. Korjaa ja jatka kunnes kaikki virheet on korjattu (kuten komentorivillä aikaisemmin).
  10. Kokeile ajaa edellisessä luvussa tekemäsi ohjelma kolmella eri tavalla:
    1. Valitse hiirellä menuista Run ja sieltä Run.
    2. Paina [Alt-R] ja [R].
    3. Paina [F9].
  11. Mikä edellistä tavoista tuntuu parhaalta?
Pikanäppäimet nopeuttavat ympäristön käyttöä huomattavasti. Edellä on jo mainittu näistä osa. Täydellisen listan JBuilderin pikanäppäimistä ja niiden käyttötarkoituksesta näet valitsemalla Tools-valikosta IDE Options ja painat aukeavan ikkunan Browser-välilehdeltä kohdassa Keymap Customize...-painiketta.

Editoriin on siis asetettu valmiiksi useita eri pikanäppäinvaihtoehtoja (vaihtoehdot on tehty muiden editorien pikanäppäinten pohjalta)! Lisäksi käyttäjä voi halutessaan mukauttaa haluamansa pikanäppäimet uudelleen. Tässä vaiheessa lienee kuitenkin parasta poistua muuttamatta mitään [ESC] tai paina Cancel-nappia.

2.3 Kääntäjän ja editorin asetukset

Usein jokin ikkuna saattaa olla jakautunut useisiin ali-ikkunoihin tai välilehtiin (itse asiassa editorin tiedostot näkyvät oletuksena jokainen omalla välilehdellään). JBuilderin projektin asetukset saadaan esille painamalla [ALT-P] ja [O]. Ikkuna näyttää seuraavalta.

JBuilder-asetukset

Nyt ali-ikkunoina on otsikoiden alla olevat tekstit (JDK, Output path jne). Ali-ikkunasta toiseen voidaan siirtyä [Tab] ja [Shift-Tab] -näppäimillä. Kokeile!

Painikkeita on 2 eri tyyppiä: radionäppäimet (yhtä painamalla muut ponkaisevat ylös, vrt. vanha matkaradio) ja tavalliset painikkeet. Painike voidaan painaa hiirellä tai painamalla [Alt-kirjain] tai siirtymällä ko. ali-ikkunaan ja liikkumalla nuolilla ja välilyöntinäppäimellä. Tutki muita projektin asetusten välilehtiä. Huomaa myös, että voit liikkua puukomponenttien sisällä nuolinäppäimillä (erityisesti oikea nuoli avaa puun oksan ja vasen nuoli sulkee sen!).
  1. Java-kääntäjälle voidaan asettaa optioita siitä, mistä kääntäjä valittaa. Yleisesti ottaen kannattaa pitää kaikki mahdolliset virheilmoitukset päällä, koska varoitus on käytännössä jotakin vikaa ohjelmassa.
  2. Varoitukset saat päälle seuraavasti:
    1. Valitse Project properties-ikkunan Build-välilehti.
    2. Tarkista, että Show warnings ja Show ddeprecations ovat valittu (deprections varoittaa kielen vanhentuneiden ominaisuuksien käytöstä).
  3. Seuraavaksi tutkimme editorin asetuksia. Valitse Tools-valikosta Editor options.
  4. Tutki ja kokeile asetuksia

2.4 Help-toiminto

  1. Borlandin ohjelmaympäristöissä on varsin hyvä Help-toiminto. [Alt-H] ja [E]-näppäimillä saadaan tavallinen Help. Kokeile!
  2. [F1] antaa apua siitä sanasta, jonka kohdalla kursori on. Kokeile vaikkapa sanoihin String, CompareTo ja return. Avustus palauttaa luokkaan liittyvän JavaDocin, jos sellainen on saatavilla.
  3. Tätä käyttäen voidaan yleensä aina löytää syntaksi halutulle käskylle. Myöhemmin tässä ohjauksessa käytetään satunnaislukugeneraattoria Math.random(). Kokeile löytää kutsun syntaksi kirjoittamalla koodiin ylimääräinen Math ja paina [F1]. Huomaa myös JBuilderin ehdottavan automaattisesti luokkaan liittyviä metodeita koodieditorissa. Muista lopuksi pyyhkiä Math pois koodista.

2.5 Kääntäjän tekemät tiedostot

  1. Kokeile vielä ohjelman ajoa.[F9]. Ohjelman toiminta näkyy ohjelman alaosassa olevasssa ajo-ikkunassa.
  2. Poistu käyttöjärjestelmään ja tarkista, mitä juuri kirjoittamaasi ohjelmaan liittyviä tiedostoja on syntynyt hakemistoosi (ohjelmointiympäristö on todennäköisesti lisännyt uusia tiedostoja komentoriviosuudessa kirjoittamiesi lisäksi).
  3. Mieti, mitä varten mikäkin tiedosto on.
  4. Aja vielä (nyt Jbuilderilla kääntämäsi) ohjelma kuten ensimmäisessä luvussa.

3. NetBeans-editorin käyttöohjeita

Tämä luku on vaihtoehtoinen luvun 2 ja ja 4 (Borland JBuilder -editorin tai Eclipse-editorin käyttöohjeita) kanssa.

3.1 Ikkunat

NetBeans -ympäristö on suurinpiirtein seuraavan näköinen:

NetBeans

Näyttö koostuu siis pääikkunasta, joka sisältää useampia ali-ikkunoita. Ikkunan kokoa voidaan muuttaa hiirellä tarttumalla kiinni ikkunan reunaan, paikkaa tarttumalla ikkunan otsikkopalkkiin.

Ali-ikkunoiden kokoa voidaan muuttaa pääikkunan sisällä tarttumalla ikkunan reunaan. Hiiren kursori muuttuu kaksipäiseksi nuoleksi, kun olet oikealla kohdalla. Kokeile!

Ikkunasta toiseen voidaan siirtyä näpäyttämällä hiirellä ikkunan aluetta.

Kooditiedostosta toiseen siirrytään klikkaamalla vastaavan välilehden painiketta koodieditorin alapuolella tai pikanäppäimillä [Alt-Left] tai [Alt-Right].
  1. Avaa haluamasi tiedostot [Ctrl-O] ja kokeile ikkunasta toiseen siirtymistä.

3.2 Menut ja pikanäppäimet

Toimintoja voidaan valita joko hiirellä yläreunasta, tai painamalla [F10]) ja siirtymällä kursorilla halutun toiminnon kohdalle. Toiminto voidaan valita myös painamalla toiminnon korostetua kirjainta (esim. [Alt-E] avaa Edit-valikon). Siis vaihtoehtoja on useita. Aluksi menujen käyttö on näppärää nuolinäppäimillä tai hiirellä, mutta haluttaessa tehokkaampaa toimintaa, kannattaa käyttää suoravalintoja.

Kokeillaan Jarj2.java-ohjelman korjausta ja ajamista edellisen luvun tapaan.
  1. Sulje aiemmin avaamasi tiedostot ([Ctrl-F4], voit myös sulkea tiedostot koodieditorin alaosan välilehtien painikkeiden rastia). Älä tallenna muutoksia.
  2. Liitä kotihakemistosi osaksi NetBeansin tiedostojärjestelmää.
    1. Valitse File->Mount filesystem tai Filesystems-ikonin päällä hiiren oikean napin ponnahdusvalikosta Mount->Local directory.
    2. Valitse esille tulevasta ikkunasta Local directory ja paina Next-nappia (ellet valinnut jo).
    3. Mene hakemistoselaimella hakemistoon mytemp ja valitse oma kotihakemistosi klikkaamalla (älä tuplaklikkaa. Silloin hakemistoselain siirtyisi kotihakemistoosi, mutta NetBeans ei silloin osaa liittää sitä).
    4. Paina Finish-nappia. Kotihakemistosi pitäisi ilmestyä Filesystems-puuhun.
  3. Avaa Filesystems-puuta niin, että näet tiedoston Jarj2.java. Avaa tiedosto tuplaklikkaamalla tai [Ctrl-O]:lla.
  4. Muuta Jarj2.java alkuperäiseen muotoonsa, jolloin voit kokeilla kääntäjän virheilmoituksia NetBeansilla.
  5. Jotkut virheet näkyvät jo koodia kirjoittaessasi (jopa ilman kääntämistä!) punaisella alleviivattuna (vrt. M$ Word-oikoluku).
  6. Yritä kääntää ohjelma. ([F9])
  7. Virheilmoitukset tulevat ruudun alaosassa olevaan virheikkunaan. Virheikkunan avulla näkee (likimain!) virheiden paikat ohjelmakoodissa. Virheitä voi selata NetBeansissa tuplaklikkaamalla hiirellä virheikkunan vastaavaa kohtaa. Lisäksi näppäimellä [F12] pääsee seuraavan virheen kohtaan koodissa. Kokeile!
  8. Käyttäessäsi NetBeansia huomaat varmaakin, että värit osoittavat jotakin ohjelmakoodissa. Mitä? Värit auttavat paikallistamaan useita virheitä.
  9. Korjaa ja jatka kunnes kaikki virheet on korjattu (kuten komentorivillä aikaisemmin).
  10. Kokeile ajaa edellisessä luvussa tekemäsi ohjelma neljällä eri tavalla:
    1. Valitse hiirellä menuista Build ja sieltä Execute.
    2. Paina [F10], liiku kursorilla kohtaan Build. Paina [RET]. Siirry nuolilla kohtaan Execute. Paina [RET].
    3. Paina [Alt-B] ja [E].
    4. Paina [F6].
  11. Mikä edellistä tavoista tuntuu parhaalta?
Pikanäppäimet nopeuttavat ympäristön käyttöä huomattavasti. Edellä on jo mainittu näistä osa. Täydellisen listan NetBeansin pikanäppäimistä ja niiden käyttötarkoituksesta näet valitsemalla Tools-valikosta Keyboard Shortcuts.

Käyttäjä voi halutessaan mukauttaa haluamansa pikanäppäimet uudelleen. Tässä vaiheessa lienee kuitenkin parasta poistua muuttamatta mitään [ESC] tai paina Cancel-nappia.

3.3 Kääntäjän ja editorin asetukset

Usein jokin ikkuna saattaa olla jakautunut useisiin ali-ikkunoihin tai välilehtiin (itse asiassa editorin tiedostot näkyvät oletuksena jokainen omalla välilehdellään). NetBeans-käyttöympäristön asetukset saadaan esille painamalla [ALT-T] ja [O]. Ikkuna näyttää seuraavalta.

NetBeans-asetukset

Nyt ali-ikkunoina ovat otsikoiden alla olevat tekstit (Options, Building jne). Ali-ikkunasta toiseen voidaan siirtyä [Tab] ja [Shift-Tab] -näppäimillä. Kokeile!

Painikkeita on 2 eri tyyppiä: radionäppäimet (yhtä painamalla muut ponkaisevat ylös, vrt. vanha matkaradio) ja tavalliset painikkeet. Painike voidaan painaa hiirellä tai painamalla [Alt-kirjain] tai siirtymällä ko. ali-ikkunaan ja liikkumalla nuolilla ja välilyöntinäppäimellä. (Tosin tässä ikkunassa ei ole radiopainikkeita). Huomaa, että voit liikkua Options-ikkunan puussa nuolinäppäimillä (erityisesti oikea nuoli avaa puun oksan ja vasen nuoli sulkee sen!).
  1. Java-kääntäjälle voidaan asettaa optioita siitä, mistä kääntäjä valittaa. Yleisesti ottaen kannattaa pitää kaikki mahdolliset virheilmoitukset päällä, koska varoitus on käytännössä jotakin vikaa ohjelmassa.
  2. Varoitukset saat päälle seuraavasti:
    1. Valitse Options-ikkunan puusta Building->Compiler types->Internal compilation.
    2. Tarkista, että Deprecation-ominisuuden (ikkunassa oikealla) arvo on true ja Unchecked warnings arvo on false (Deprection varoittaa kielen vanhentuneiden ominaisuuksien käytöstä).
  3. Seuraavaksi tutkimme editorin asetuksia. Valitse Options-ikkunan puusta Editing.
    1. Avaa nykyisestä puun haarasta Indentation Engines->Java Indentation Engine ja merkitse Number of Spaces per Tab-ominaisuuteen sisennyksessä käyttämäsi välilyöntien määrä (sopiva arvo on 2:n ja 4:n välillä).
    2. Avaa vielä puun Editing-haarasta Editor Settings->Java Editor.
    3. Merkitse Tab Size ominaisuuteen sama numero kuin aiemmin Number of Spaces per Tab-kohtaan.
    4. Tarkista, että Indentation Engine-ominaisuuden arvo on Java Indentation.

3.4 Help-toiminto

  1. NetBeans-ohjelmaympäristöissä on varsin hyvä Help-toiminto. [F1] -näppäimillä saadaan tavallinen Help. Kokeile!
  2. JavaDoc-dokumenttien käyttäminen edellyttää, että tiedostot on liitetty NetBeansin avustusjärjestelmään. Liitetään Java-kielen API-dokumentaatio seuraavasti:
    1. Valitse Tools->Javadoc Manager ja esille tulevasta ikkunasta Add HTTP.
    2. Kirjoita Javan API-dokumentaation URL ikkunaan: http://java.sun.com/j2se/1.4.1/docs/api/. Jos sivu on sinulla auki selaimessa (tai tämä dokumentti on koneellasi), voit myös kopioida osoitteen leikepöydälle ja liittää sen ikkunaan. ([Shift-Ins] tai [Ctrl-V])
    3. Huom! Jos olet asentanut NetBeansin kotikoneellesi ja sinulla on SDK:n helpit (ks. Kurssilla käytettävät ohjelmat, voit kotikoneella asettaa API-dokumentaation myös paikalliseen hakemistoon (Add Folder).
  3. [Shift-F1] antaa apua siitä sanasta, jonka kohdalla kursori on käyttäen ns. JavaDoc-indeksihakua. Kokeile vaikkapa sanoihin String, CompareTo ja return. Avustus palauttaa luokkaan liittyvän JavaDocin, jos sellainen on saatavilla.
  4. Tätä käyttäen voidaan yleensä aina löytää syntaksi halutulle käskylle. Myöhemmin tässä ohjauksessa käytetään satunnaislukugeneraattoria Math.random(). Kokeile löytää kutsun syntaksi kirjoittamalla koodiin ylimääräinen Math ja paina [F1]. Huomaa myös NetBeansin ehdottavan automaattisesti luokkaan liittyviä metodeita koodieditorissa. Muista lopuksi pyyhkiä Math pois koodista.

3.5 Kääntäjän tekemät tiedostot

  1. Kokeile vielä ohjelman ajoa.[F6]. Ohjelman toiminta näkyy ohjelman alaosassa olevasssa ajo-ikkunassa.
  2. Poistu käyttöjärjestelmään ja tarkista, mitä juuri kirjoittamaasi ohjelmaan liittyviä tiedostoja on syntynyt hakemistoosi (ohjelmointiympäristö on todennäköisesti lisännyt uusia tiedostoja komentoriviosuudessa kirjoittamiesi lisäksi).
  3. Mieti, mitä varten mikäkin tiedosto on.
  4. Aja vielä (nyt NetBeansilla kääntämäsi) ohjelma kuten ensimmäisessä luvussa.

4. Eclipse -editorin käyttöohjeita

Tämä luku on vaihtoehtoinen lukujen 2 ja 3 (JBuilder ja NetBeans-editorien käyttöohjeita) kanssa.

Eclipse on monikäyttöinen, mutta Java-kielelle alunperin suunniteltu IDE.
Se on hyvin taipuvainen ja sitä voidaan käyttää myös esim. c/c++ ohjelmiin, internet sovellusten ja sivujen ja graafisien (widget) ohjelmien tekemiseen.
Kaiken lisäksi se on ilmainen!

4.1 Ikkunat

Eclipse -ympäristö projektin aukiollessa on suurinpiirtein seuraavan näköinen :

Eclipse


Käynnistäessäsi Eclipsen, näet "tervehdys"-ikkunan, josta saat esiin esim. java esimerkkejä, tietoa Eclipsestä ja kaikkea muuta mahdollista.

Myöskin tulee huomata, ettei näkymä välttämättä ole ihan samanlainen kuin ylläolevassa kuvassa. Eclipsessä on erilaisia "näkymiä", joista käyttäjä saa valita mieleisensä(ylläolevassa kuvassa on "Java"-näkymä päällä).
Vasemmasta yläkulmasta saat selville mikä näkymä on tällähetkellä päällä. Avatessasi tai luodessasi Java projektin Eclipse kysyy, että vaihdetaanko näkymää toiseen. Vastaa tähän, että kyllä.

Näyttö koostuu siis pääikkunasta, joka sisältää useampia ali-ikkunoita. Ikkunan kokoa voidaan muuttaa hiirellä tarttumalla kiinni ikkunan reunaan, paikkaa tarttumalla ikkunan otsikkopalkkiin.

Ali-ikkunoiden kokoa voidaan muuttaa pääikkunan sisällä tarttumalla ikkunan reunaan. Hiiren kursori muuttuu kaksipäiseksi nuoleksi, kun olet oikealla kohdalla. Kokeile!

Ikkunasta toiseen voidaan siirtyä näpäyttämällä hiirellä ikkunan otsikkoa.
Pääset käsiksi yläpalkin nappuloihin joko hiirellä tai painamalla [Ctrl-TAB].

Kooditiedostosta toiseen siirrytään klikkaamalla vastaavan välilehden painiketta koodieditorin yläpuolella tai Package Explorer-valikon kautta ([CTRL-F6] ja [CTRL-SHIFT-F6] tai yleisesti [CTRL-E]).
  1. Avaa haluamasi tiedostot (File->Open external file...)
  2. Kokeile ikkunasta toiseen siirtymistä.

4.2 Menut ja pikanäppäimet

Toimintoja voidaan valita joko hiirellä yläreunasta, tai painamalla [F10]) ja siirtymällä kursorilla halutun toiminnon kohdalle. Toiminto voidaan valita myös painamalla toiminnon korostetua kirjainta (esim. [ALT-E] avaa Edit-valikon). Siis vaihtoehtoja on useita. Aluksi menujen käyttö on näppärää nuolinäppäimillä tai hiirellä, mutta haluttaessa tehokkaampaa toimintaa, kannattaa käyttää suoravalintoja.

Kokeillaan Jarj2.java-ohjelman korjausta ja ajamista edellisen luvun tapaan.
  1. Sulje aiemmin avaamasi tiedostot (File->Close all) ja mahdolliset Eclipsen avoinna olevat (Package explorerissa "avoimet siniset kansiot") projektit (Project->Close project, tämä pitää tehdä kaikille avoinna oleville projekteille, älä tallenna muutoksia.).
  2. Aloitetaan uusi projekti ja määritellään asetukset.
    1. Avaa Project Wizard. (File->New->Project...)
    2. Valitse "Java project"
    3. Anna projektille haluamasi nimi ja varmista, että työhakemistoksi(workspace) tulee alkuperäinen työhakemistosi C:\MyTemp\ohj2\tunnus
    4. Paina Next. Project Wizard siirtyy projektin asetussivulle(Tai suoraan Finish, kaikki pitäisi oletuksena olla oikein)
    5. Paina Finish. Projekti on luotu.
  3. Lisää Jarj2.java projektiin (File->New->File ja anna sille nimeksi Jarj2.java (varmista, että projektisi on valittu) TAI voit suoraan File->New->Class ja syöttää sinne tiedot).
  4. Muuta Jarj2.java alkuperäiseen muotoonsa, jolloin voit kokeilla kääntäjän virheilmoituksia Eclipsellä.
  5. Jotkut virheet näkyvät jo koodia kirjoittaessasi (jopa ilman kääntämistä!) alhaalla olevassa Problems läpyskässä.
  6. Eclipse yrittää automaattisesti kääntää ohjelmaa taustalla kun joko tallennat tai muutat koodia(JOS Project->Build automaticly on päällä), jos kuitenkaan näin ei ole, käännä ohjelma manuaalisesti (Project->Build All) [CTRL-B].
  7. Virheilmoitukset tulevat ruudun alaosassa olevaan virheikkunaan. Virheikkunan avulla näkee (likimain!) virheiden paikat ohjelmakoodissa. Virheitä voi selata Eclipsessä klikkaamalla hiirellä tullutta virhettä. Voit myös nuolinäppäimillä kursoria ylös tai alaspäin painamalla liikkua virheiden välillä(jos niitä on monta), kun virheikkunassa joku virhe on valittu. Kokeile!
  8. Käyttäessäsi NetBeansia, JBuilderia tai Eclipseä huomaat varmaakin, että värit osoittavat jotakin ohjelmakoodissa. Mitä? Värit auttavat paikallistamaan useita virheitä.
  9. Korjaa ja jatka kunnes kaikki virheet on korjattu (kuten komentorivillä aikaisemmin).
  10. Kokeile ajaa edellisessä luvussa tekemäsi ohjelma kolmella eri tavalla(Paina aina Cancel jos ohjelma ei lähde käyntiin vaan tulee "outo" ikkuna):
    1. Valitse hiirellä menuista Run ja sieltä Run...
    2. Paina [CTRL-F11] ja [R].
    3. Klikkaa Run nappulan("Play"-merkki) oikealla puolella olevaa alaspäin olevaa nuolta ja sieltä Run as->Java Application tai Run valikosta Run as->Java Application.
  11. Mikä edellistä tavoista tuntuu parhaalta?
Huomaa, kun kokeilit ENSIMMÄISELLÄ kerralla ajaa ohjelmaa tavoilla 1 ja 2 niin avautui erillinen ikkuna, tässä ikkunassa pystyt määrittelemään esim. erilaiset testirajapinnat, komentorivin erikoiskomennot ja kaikkia paljon muuta.
Kuitenkin kun olet kerran ajanut tavalla 3 Eclipse tekee valmiit "perusasetukset" ohjelmalle, joita kuitenkin pystyt muokkaamaan valikosta Run->Run... ja valitsemalla sieltä projektisi.

Pikanäppäimet nopeuttavat ympäristön käyttöä huomattavasti. Edellä on jo mainittu näistä osa. Täydellisen listan Eclipsen pikanäppäimistä ja niiden käyttötarkoituksesta näet valitsemalla Window-valikosta Preferences ja painat aukeavan ikkunan vasemmasta ylänurkasta Workbench tekstin vasemmalla puolella olevaa + tai - merkkiä niin, että esiin tulee Keys valikko ja painat täten sitä.

Editoriin on siis asetettu valmiiksi useita eri pikanäppäinvaihtoehtoja (vaihtoehdot on tehty muiden editorien pikanäppäinten pohjalta)! Lisäksi käyttäjä voi halutessaan mukauttaa haluamansa pikanäppäimet uudelleen. Tässä vaiheessa lienee kuitenkin parasta poistua muuttamatta mitään [ESC] tai paina Cancel-nappia.

4.3 Kääntäjän ja editorin asetukset

Saat kääntäjän (ja kyseisen projektisi) asetukset esiin siten, että valitset aluksi Package Explorer:sta projektisi ja sen jälkeen Project->Properties. Nyt pitäisi avautua seuraavanlainen ikkuna.

Eclipse projektin asetukset

Nyt näet vasemmalla eri kohtien nimet (Info, BeanInfo Path, Builders, Java Build Path jne). Voit siirtyä kohdista toiseen painamalla eri kohtiin hiirellä tai näppäimistöllä siirtyen aluksi vasemmalle ([TAB] tai [SHIFT-TAB]) ja sitten nuolilla ylös- tai alaspäin. Kokeile!

Huomaa myös, että eri asetuskohtien alta ilmestyy vielä paljon erilaisia asetuksia. Kannattaa tutkia (muttei hirveästi muutella jos ei tiedä mitä tekee) tarkasti mitä kaikkia pystyt projektistasi muuttamaan.
  1. Java-kääntäjälle voidaan asettaa optioita siitä, mistä kääntäjä valittaa. Yleisesti ottaen kannattaa pitää kaikki mahdolliset virheilmoitukset päällä, koska varoitus on käytännössä jotakin vikaa ohjelmassa.
  2. Varoitukset saat päälle seuraavasti:
    1. Valitse Project->properties -ikkunasta Java Compiler -osuus ja sieltä Style-välilehti.
    2. Nyt näet radionäppäimet Use workspace settings ja Use project settings, valitse kumman haluat. Huomaa, että jos valitset Use workspace settings niin kaikki muutokset mitä teet tulee myös muihin UUSIIN projekteihin mukaan. Valitse vaikka Use Project settings jos et ole varma mitä teet.
    3. Jos valitsit Use workspace settings niin sinun tulee painaa Configure workspace settings nappulaa muuttaaksesi varoitustasoja. Jos taas valitsit Use project settings sinun pitäisi nähdä Style-välilehdellä eri varoitustasojen vaihtoehdot.
    4. Nyt voit valita esim., että mistä Eclipse valittaa varoituksella tai mistä virheistä se tekee "kriittisiä". Yleensä valmiit asetukset ovat ihan kohdallaan eikä niitä tarvitse muuttaa, mutta jos kuitenkin haluaa niin täältä se onnistuu.
  3. Sulje ikkuna joko Ok- tai Cancel-nappulalla riippuen siitä haluatko muuttaa asetuksia(ok) vai et (cancel).
Pystyt muuttamaan (kannattaa tutkia) editorin asetuksia seuraavasti.
  1. Mene Window valikosta Preferences osioon.
  2. Valitse vasemmalta Workbench ja avaa sen osio (paina + jos se näkyy Workbench tekstin vasemmalla puolella).
  3. Nyt näet monia eri vaihtoehtoja ja aliosioita, esim. Colors and Fonts.
  4. Tutki ja kokeile muuttaa asetuksia (esim. fonttia)

4.4 Help-toiminto

  1. Eclipsen ohjelmaympäristöissä on varsin hyvä Help-toiminto. Help valikosta Help Contents saadaan tavallinen Help. Kokeile!
  2. [SHIFT-F2] antaa apua siitä sanasta, jonka kohdalla kursori on(tai minkä tekstin koodista on valinnut). Kokeile vaikkapa sanoihin String, CompareTo ja return. Avustus palauttaa luokkaan liittyvän JavaDocin, jos sellainen on saatavilla. Käytä tätä siten, että esim. String sanan kohdalla painat F1 jolloin tulee valikko esiin, ja paina vielä valikosta Javadoc for String kohtaa, niin Eclipse avaa selaimeesi Javadocin Stringistä(Tai suoraan SHIFT-F2.
  3. Tätä käyttäen voidaan yleensä aina löytää syntaksi halutulle käskylle. Myöhemmin tässä ohjauksessa käytetään satunnaislukugeneraattoria Math.random(). Kokeile löytää kutsun syntaksi kirjoittamalla koodiin ylimääräinen Math ja paina ".". Huomaa myös Eclipsen ehdottavan automaattisesti luokkaan liittyviä metodeita koodieditorissa. Muista lopuksi pyyhkiä Math. pois koodista.

4.5 Kääntäjän tekemät tiedostot

  1. Kokeile vielä ohjelman ajoa (Run->Run as...>Java Application). Ohjelman toiminta näkyy ohjelman alaosassa olevasssa ajo-ikkunassa.
  2. Poistu käyttöjärjestelmään ja tarkista, mitä juuri kirjoittamaasi ohjelmaan liittyviä tiedostoja on syntynyt hakemistoosi (ohjelmointiympäristö on todennäköisesti lisännyt uusia tiedostoja komentoriviosuudessa kirjoittamiesi lisäksi ja EHKÄ luonut niille sopivia hakemistoja).
  3. Mieti, mitä varten mikäkin tiedosto on.
  4. Aja vielä (nyt Eclipsellä kääntämäsi) ohjelma kuten ensimmäisessä luvussa.

5. Debuggerin käyttö

Kokeillaan Jarj2-ohjelman ajoa rivi kerrallaan JBuilderin, NetBeansin tai Eclipsen debuggerilla.
  1. NetBeans: vaihda vasemmalla olevalta Explorer-ikkunasta Editing-välilehti
    Debugging-välilehdeksi. Eclipse: vaihda näkymä debug näkymäksi Window-ylävalikosta Show perspective->Debug
  2. Aja ohjelmaa rivi kerrallaan ([F7] tai [F8], Eclipsessä Run->Debug as->Java Applicaton). Voit myös asettaa koodiin keskeytyskohdan (breakpoint) klikkaamalla koodieditorin vasempaa reunusta haluamasi rivin kohdalta tai näppäimistöllä (JB: Run->Add Breakpoint->Add Line breakpoint. NB: [Ctrl-Shift-F8]. Eclipse: [CTRL-SHIFT-B]). Valitsemasi rivin kohdalle pitäisi tulla punainen palkki.
  3. Tarkista, että WATCH-ikkuna on näkyvissä (JB: Debugatessasi ohjelmaa ikkunan alareunaan ilmestyy debug-ikkunoita, joissa näkyy tietoa ohjelmasta. Watch-ikkunan saa esiin painamalla ikkunan vasemmassa reunassa olevasta painikkeesta, jonka työkaluvinkkinä on Data watches. NB: Watch-ikkuna on Debugging-välilehden alin ikkuna.Eclipse: Watch ikkuna on oikeassa ylänurkassa välilehtinimellä Variables)
  4. Laita yksi kerrallaan WATCH-ikkunaan muuttujat s1, s2 ja t. (JB: Hiiren oikean napin ponnahdusvalikosta Add Watch. NB:[Ctrl-Shift-F7]. Eclipse: Variables ikkunasta (kun sinne ohjelman ajonaikana ilmestyy muuttujia) oikealla hiirennapilla muutujan päällä ja valikosta Watch) Laita WATCH-ikkunaan myös ehto s1.compareTo(s2)>0(Eclipse: Window->Show view->Expression -ikkunassa paina hiiren oikeaa nappia ja valikosta Add Watch Expression). Aluksi muuttujien perässä voi olla virheilmoitus jonka pitäisi poistua kun ohjelman suoritus aloitetaan ja muuttujan "elämä alkaa".
  5. Katso välillä tulostusruutua (JB: Console output, input and errors, Debug-ikkunassa ylhäällä oleva painike. NB:Process output koodieditorin alapuolella).Eclipse: Alhaalla on Console-välilehti, josta näkee konsolin tulostuksen.
  6. Kokeile uudestaan. Käytä myös kursoriin saakka ajamista (eli siirrä kursori vaikkapa riville s2=t ja paina [F4]. Eclipsessä käytä Breakpointeja).
  7. Siirrä vaihtamisessa suoritettavat lauseet samalle riville: t=s1; s1=s2; s2=t;
    1. Siirry rivin loppuun. ([End])
    2. Poista rivin loppu. ([Ctrl-T] tai ([Del])
    3. Poista seuraava sana. ([Ctrl-T])
    4. Lisää välilyönti.
  8. Kokeile suoritusta rivi kerrallaan uudelleen, kun ko. lauseet on siirretty.
  9. Kokeile suoritusta rivi kerrallaan käyttämällä nyt näppäintä [F8]. Mitä eroa näppäimeen [F7]?
  10. Lisää ohjelmaan tulostusrivi, joka kertoo ohjelman käyttäjälle mitä ohjelma tekee.
  11. Tallenna ohjelma lopuksi. ([Ctrl-S])

6. Lohkojen käsittely

Harjoitellaan uuden ohjelman kirjoitusta ja leiketaulun käyttöä.
  1. Aloita uusi ohjelma nimeltä Jarj2.java.
    • JB: [Ctrl-N], valitse Class, OK. Seuraavassa ikkunassa jätä Package-kohta tyhjäksi ja Class Name-kenttään Jarj3.
    • NB: [Ctrl-N], valitse puusta Java Classes ja Main, Next. Kirjoita Name-kenttään Jarj3 ja valitse puusta työhakemistosi. Paina kolme kertaa Next-nappia ja lopuksi Finish-nappia.
    • Eclipse: [Ctrl-N], valitse puusta Class ja paina Next. Kirjoita Name-kenttään Jarj3. Paina Finish-nappia.
  2. Kopioi pohjaksi edellinen ohjelma Jarj3.java.
    1. Aktivoi Jarj2.java-tiedoston ikkuna (Window-valikko, NB:ssä ja Eclipse:ssä myös [ALT-RIGHT] tai [ALT-LEFT]).
    2. Valitse koko tiedosto ([Ctrl-END] ja [Ctrl-SHIFT-HOME], JB:ssä myös hiiren oikean napin ponnahdusvalikosta Select All.Eclipse:ssä [CTRL-A]).
    3. Kopioi tiedosto leikepöydälle ([Ctrl-Ins] tai [Ctrl-C]).
    4. Huomaa, että uuden luokan nimen on oltava Jarj3!
  3. Tarkoituksena on muuttaa ohjelmaa siten, että järjestetäänkin 3 lukua suuruusjärjestykseen (rivit on numeroitu jotta alla voidaan viitata riveihin; numeroita ei missään tapauksessa kirjoiteta!):
  4. LUE ENNEN KIRJOITTAMISTA HUOLELLISESTI ALLA OLEVAT KIRJOITUSOHJEET!
    01 import java.io.*; // tarvitaan tietojen syöttöön
    02 /**Jarj2
    03  * Ohjelma järjestää kolme merkkijonoa aakkosjärjestykseen
    04  * @author
    05  * @version */
    06 public class Jarj3 {
    07
    08   /**Kysyy käyttäjältä merkkijonon annetulla tulosteella.
    09    *  @param prompt lause, joka käyttäjä näkee ennen tietojen syöttöä
    10    *  @return käyttäjän syöttämä merkkijono ilman rivinvaihtoa */
    11   public static String kysy(String prompt) {
    12     System.out.print(prompt);
    13
    14     // Syöttöpyyntö ja vastauksen lukeminen
    15     BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    16     try {
    17       return in.readLine();
    18       } catch (IOException ex) { return ""; }
    19   }
    20
    21   /**Pääohjelma
    22    * @param args Komentorivillä annetut parametetrit */
    23   public static void main(String[] args) {
    24     String s1,s2,s3,t;
    25     s1 = kysy("Anna 1. merkkijono >");
    26     s2 = kysy("Anna 2. merkkijono >");
    27     s3 = kysy("Anna 3. merkkijono >");
    28
    29     if ( s1.compareTo(s2) > 0 ) {
    30       t = s1; s1 = s2; s2 = t;
    31     }
    32     if ( s1.compareTo(s3) > 0 ) {
    33       t = s1; s1 = s3; s3 = t;
    34     }
    35     if ( s2.compareTo(s3) > 0 ) {
    36       t = s2; s2 = s3; s3 = t;
    37     }
    38     System.out.println("Jonot "+s1+", "+s2+","+s3+".");
    39   }
    40 }
  5. Kolmannen luvun lukeminen voidaan kopioida vaikkapa 2. luvun lukemisesta (rivinumerot viittaavat valmiiseen koodiin):
    1. Siirry rivin 26 alkuun. (nuolet ja [Home])
    2. Merkitse lohkon alku. (paina [Shift] pohjaan ja pidä se siellä)
    3. Siirry seuraavan rivin alkuun. (nuoli alas)
    4. Merkitse lohkon loppu. (päästä [Shift] ylös)
    5. Kopioi lohko leikepöydälle. ([Ctrl-Ins] tai [Ctrl-C])
    6. Liitä lohko leikepöydältä. ([Shift-Ins] tai [Ctrl-V], mahd. uudestaan jos rivi ei tullut kahdesti)
    7. Tee riville tarvittavat muutokset.
  6. Vertailut saadaan vastaavasti kopioimalla rivit 29-31 (ed. esim. mukaiset valmiit rivinrot) kahteen kertaan:
    1. Siirry rivin 29 alkuun. (nuolet ja [Home])
    2. Merkitse lohkon alku. ([Shift] pohjaan ja pidä siellä)
    3. Siirry rivin 32 alkuun. ([nuolet alas])
    4. Merkitse lohkon loppu. ([Shift] ylös)
    5. Kopioi lohko leikepöydälle. ([Ctrl-Ins] tai [Ctrl-C])
    6. Liitä lohko leikepöydältä. ([Shift-Ins] tai [Ctrl-V], mahd. uudestaan)
    7. Tee riveille tarvittavat muutokset.
  7. Tee loput tarvittavat muutokset.
  8. Tallenna ohjelma.
  9. Tarkista ajettava tiedosto ja debuggerin tila.
    • JB: Varmista, että uusi ohjelmasi on projektin pääluokka (Run, Configurations..., Edit..., Main class.... Valitse listasta Jarj3). Jos et halua vaihtaa pääluokkaa, voit ajaa tekemäsi luokan painamalla hiiren oikeaa nappia ikkunan vasemmassa reunassa olevassa tiedostopuussa Jarj3.java-tiedoston päällä. Valitse ponnahdusvalikosta Run using tai Debug using.
    • NB: NetBeansilla voi olla useampia debug-istuntoja päällä samanaikaisesti. Muista lopettaa Jarj2-ohjelman debuggaus, ennenkuin alat debugata Jarj3-ohjelmaa (muuten debuggeri saattaa käynnistää väärän ohjelman). Debuggausistunnon voi lopettaa pikanäppäimellä [Shift-F5].
    • Eclipse: Eclipselläkin voi olla useampia debug-istuntoja päällä samanaikaisesti. Muista lopettaa Jarj2-ohjelman debuggaus, ennenkuin alat debugata Jarj3-ohjelmaa (muuten debuggeri saattaa käynnistää väärän ohjelman). Debuggausistunnon voi lopettaa painamalla punaista neliötä.
  10. Aja ohjelmaa ja tutki toimiiko. Muista, että debuggeria käyttäessä ohjelma pitää käynnistää Run in debugger-komennolla. (JB:[Shift-F9], NB: [ALT-F5])
  11. Lisää myös s3 WATCH-ikkunaan. Lohkon voi merkitä myös hiirellä. Kokeile sitäkin, mutta muista, että näppäimistö on aina nopeampi ja tarkempi (kun sen kunnolla opettelee)!
  12. Kirjoittamasi koodin voi sisentää automaattisesti valitsemalla halutun alueen ja komennoilla (JB: [Tab] tai [Shift-Tab] NB: Ctrl-Shift-F tai hiiren oikean napin ponnahdusvalikosta Reformat Code. Eclipse:ssä [CTRL-SHIFT-F]).

7. Luokkametodit (funktiot, aliohjelmat...)

Muokataan edellisessä luvussa kirjoitettua ohjelmaa niin, että merkkijonojen vaihto tehdään omassa aliohjelmassaan (koska Java on oliokieli, aliohjelman tai funktion sijaan virallinen nimitys olisi luokkametodi tai staattinen metodi).
  1. Muokkaa tiedostosta Jarj3.java uusi tiedosto Jarj3a.java:
    Jarj3a.java.
  2. Laita WATCH-ikkunaan muuttujat s1, s2, s3, a, b ja t.
  3. Kokeile ajaa askel kerrallaan käyttäen sekä [F7] että [F8]. Mikä on näppäinten välinen ero?
  4. Kommentoi metodista vaihda kaikki rivit, joilla kutsutaan append- tai delete-metodeita. Lisää niiden tilalle seuraavat rivit:
        a = b;
        b = new StringBuffer(t);
    
  5. Tallenna muutettu ohjelma.
  6. Kokeile ohjelman toimintaa askel kerrallaan. Muuttuvatko s1, s2 ja s3 aliohjelman suorituksen aikana kuten edellisellä kerralla?
  7. Poista tai kommentoi viimeksi kirjoittamasi rivit ja palauta alkuperäiset rivit koodiin.
  8. Käännä Jarj3a.java uudelleen ja kokeile vielä kerran suoritusta askel kerrallaan. Mieti, miksi versiot käyttäytyvät eri tavalla.

Lisätietoa Javan metodeista ja parametrinvälityksestä on luentomonisteessa: luku 8.6.5.

8. Taulukot

Miten edellistä ohjelmaa pitäisi muuttaa mikäli haluttaisiin järjestää 4 lukua? Taitaisi jo tulla varsin sotkuiseksi.
  1. Muutetaan ohjelmaa (kirjoita nimelle Jarj3ta.java, käyttäen pohjana Jarj3.java-ohjelmaa) siten, että apuna käytetään taulukkoa:
    Jarj3ta.java
  2. Aliohjelma vaihda voidaan hakea tiedostosta Jarj3a.java seuraavasti:
    1. Siirry tiedostoon Jarja3a.java.
    2. Merkitse aliohjelma lohkoksi (siirry alkuun ja [Shift] pohjaan, siirry nuolilla loppuun ja [Shift] ylös).
    3. Kopioi lohko leikekirjaan ([Ctrl-Ins] tai [Ctrl-C]).
    4. Siirry tiedostoon Jarj3ta.java.
    5. Liitä lohko leikekirjasta (siirry haluttuun kohtaan ja paina [Shift-Ins] tai [Ctrl-V]).
  3. Edellinen ohjelma ei ehkä ole yhtä selkeä (?) kuin Jarj3.java, mutta lukujen lukumäärä esiintyy ohjelmassa enää vain yhdessä paikassa. Missä?
  4. Tallenna ohjelma.
  5. Poista WATCH-ikkunasta kaikki tarpeeton:
    1. Siirry WATCH-ikkunaan.
    2. Siirry poistettavalle riville.
    3. Poista rivi. ([DEL])
    4. ...
    5. Siirry takaisin editointi-ikkunaan.
  6. Lisää taulukko luvut sekä muuttujat pienin ja tutki WATCH-ikkunaan.
  7. Aja ohjelmaa askel kerrallaan. Toimiiko täsmälleen vastaavasti kuin Jarj3.java?
  8. Muuta ohjelmassa KOKO-muuttujan arvoksi 5 ja kokeile toimintaa.

9. Järjestäminen ja Java-kielen kirjasto

Järjestämisessä voimme Java-kielen tapauksessa käyttää apuna myös valmista Arrays-luokan metodia sort. Rutiinin käyttämistä varten meidän tarvitsee vain kirjoittaa IComparable-rajapinnan toteuttava luokka, joka osaa verrata järjestettävän taulukon kahta alkiota keskenään palauttaen negatiivisen luvun, nollan tai positiivisen luvun sen mukaan, miten verratattavat alkiot suhtautuvat toisiinsa:
  1. Muuta edellinen ohjelma seuraavanlaiseksi ja tallenna nimellä Jarjta.java:
    Jarjta.java
  2. Aja ohjelmaa askel kerrallaan. Toimiiko?
  3. Laita keskeytyskohta riville
       return s1.compareTo(s2);
  4. sekä lisää muuttujat s1 ja s1 WATCH-ikkunaan. Aja ohjelmaa Run in Debugger-käskyllä. Montako kertaa aliohjelmassa käydään?
  5. Kirjoita vielä edellisestä korjaillen seuraava ohjelma nimelle Jarjnum.java:
  6. Ohjelma joka järjestää merkkijonojen sijasta kokonaislukuja, mutta käyttää samaa sort-metodia. Lukujen järjestämistä varten ei tarvita compare-funktiota.
  7. Aja ohjelmaa rivi kerrallaan. Kokeile luvut-taulukon arvojen muuttamista ajon aikana.
    • JB: Valitse alhaalla olevista Debug-ikkunoista Threads, call stacks and data. Avaa vasemmalla olevaa main-puuta niin pitkälle kuin voit. Huomaa oikeanpuoleiseen ikkunaan tulevia muutujanimiä. Avaa luvut-muuttuja. Paina hiiren oikeaa nappia jonkin indeksin kohdalla ja valitse ponnahdusvalikosta Change value.... Kirjoita uusi arvo.
    • NB: Valitse vasemmassa reunassa olevasta Debug-ikkunasta Local Variables. Avaa luvut-muuttuja. Paina hiiren nappia jonkin indeksin kohdalla Value-sarakkeessa. Kirjoita uusi arvo.
    • Eclipse: tuplaklikkaa debug moodissa oikealla ylhäällä olevasta variables listasta luvut-muuttujaa ja näin voit muuttaa sen arvoa.
  8. Aja ohjelma ja ota aika kauanko ohjelman suoritukseen menee.

10. Tavoite

Edellisistä ohjelmista Jarj3a.java näytti ehkä kaikkein selkeimmältä. Siinä oli kuitenkin se vika, että muuttaminen useamman luvun käsittelyä varten vaatisi suuria muutoksia itse ohjelmaan.

Jarj3ta.java voidaan helposti muuttaa käsittelemään useampaakin lukua. Se ei kuitenkaan ole sellaisenaan erityisen selkeä.

Jatkossa pyritään siihen, että em. ohjelma voitaisiin kirjoittaa muodossa:
    ...
    { /* Pääohjelma */
      Luvut luvut = new Luvut();
      luvut.lue(System.in);
      luvut.jarjesta();
      luvut.tulosta(System.out)
      // tai System.out.println(luvut);
    }
  
Pääohjelman ja "ylemmän tason" aliohjelmien pitäisi siis olla mahdollisimman selkeitä. Tämä parantaa ohjelman luettavuutta ja ylläpidettävyyttä.