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.