- COMP.CS.140
- 2. Tervetuloa Ohjelmointi 3: rajapinnat ja tekniikat -kurssille
- 2.3 Java: ohjelmointiympäristö
- 2.3.5 Vinkkejä ensimmäiseen palautettavaan ohjelmointitehtävään
Vinkkejä ensimmäiseen palautettavaan ohjelmointitehtävään¶
Ensimmäisessä Plussaan palautettavassa ohjelmointitehtävässä sinun tulee toteuttaa ohjelma, joka lukee käyttäjältä joukon lukuja ja tulostaa näytölle niiden keskiarvon. Tässä esitellään lyhyesti vielä muutamia Javan perusasioita, joita tehtävän ratkaisu vaatii.
Jotta koodi saadaan toimimaan, on kooditiedoston alkuun laitettava seuraava rivi:
import java.util.Scanner;
Importeista kerrotaan lisää osiossa Tarkempi johdanto Java-kieleen, mutta tätä tehtävää varten tarvitsee vain tietää, että tämä koodirivi on tarpeellinen, jotta Scanner-luokka saadaan ohjelman käyttöön.
Käyttäjältä voi lukea syötettä Javassa monella tapaa, mutta yksi varsin yksinkertainen tapa on käyttää
Scanner-luokkaa.
Javassa luokasta luodaan uusi olio new
-avainsanalla. Oliota luodessa voidaan antaa myös parametrejä,
jotka vaikuttavat luodun olion toimintaan. Jotta voimme lukea käyttäjältä syötettä, Scanner
-olio on liitettävä
standardisyötevirtaan. Tämä tapahtuu kätevimmin antamalla standardisyötevirta System.in
parametriksi oliota
luodessa, tapaan:
Scanner myScanner = new Scanner(System.in);
Ylläolevassa koodipätkässä siis luotiin uusi Scanner
-olio, annettiin rakentimelle parametriksi standardisyötevirta
System.in
ja talletettiin luotu olio Scanner
-tyyppiseen muuttujaan nimeltä myScanner
. Tätä oliota käyttäen voidaan
lukea käyttäjältä yksi rivi syötettä seuraavasti:
String line = myScanner.nextLine();
Kun tämä rivi tulee koodissa vastaan, ohjelma seisahtuu ja jää odottamaan käyttäjältä syötettä. Syöte annetaan
kirjoittamalla syöte komentotulkkiin, ja päätetään painamalla rivinvaihtoa (Enter). Annettu rivi tallennetaan
String
-tyyppiseen muuttujaan line
. Tehtävässä oletetaan, että käyttäjältä luetaan yksi rivi, joka sisältää
luvut välilyönneillä erotettuina. Helpoin tapa saada luvut tuosta rivistä poimittua on käyttää String
-luokan
split
-metodia tapaan:
String[] numbers = line.split(" ");
Edeltävä koodinpätkä ottaa merkkijonon line
, pilkkoo sen välilyöntien kohdalta ja laittaa palaset
(tässä tapauksessa yksittäiset luvut) merkkijonoja sisältävään taulukkoon numbers
. Taulukon läpikäyntiä varten tarvitaan
silmukka. Voit valita while
-silmukan ja for
-silmukan välillä, mutta vinkkinä jälkimmäisellä pystyy
oikomaan paljon itse parametrien käsittelyn osalta. Syntaksiltaan for
-silmukan perusmuoto muistuttaa C++:aa.
for (alustus; lopetusehto; askel) {
silmukan runko
}
Silmukasta löytyy kuitenkin myös muoto, joka on tarkoitettu esimerkiksi taulukoiden ja säiliö-tietorakenteiden läpikäyntiin.
for (alkio : säiliö) {
silmukan runko
}
Esimerkki tällaisesta silmukasta, joka tulostaisi taulukon numbers
elementit ruudulle:
for (String s : numbers) {
System.out.println(s);
}
Jos haluat käydä taulukon läpi perinteisellä for
-silmukalla indeksi kerrallaan, täytyy tietää taulukon koko.
Tässä auttaa tieto, että Javan taulukoilla on taulukon koon kertova jäsen length
, johon voi viitata
Pythonista ja C++:sta tutulla pistenotaatiolla. Myös taulukon tietyn indeksin alkioon viitataan Javassa tuttuun
tapaan “indeksi hakasuluissa”-notaatiolla. Alla on esimerkkinä silmukka, joka tulostaa taulukon numbers
elementit
indeksien kera ruudulle. Huomaa, kuinka Javassa voi liittää tulostettavia osia yhteen +
-operaattorilla samaan
tapaan kuin esim. Pythonissa.
for (int i = 0; i < numbers.length; i++) {
System.out.println(i + ": " + numbers[i]); // Tulostus muotoa "indeksi: parametri".
}
Jos s
on String
-merkkijono, joka esittää lukua, voi sen muuntaa double
-arvoksi kutsulla Double.parseDouble(s)
.
Siis esimerkiksi:
String s = "3.14";
double d = Double.parseDouble(s); // double-muuttuja d saa arvon 3.14.
Keskiarvo-tehtävän pitäisi olla edellisten esimerkkien pohjalta varsin suoraviivainen.