Osan kaikki tehtävät
huomautus
Jos palautat tehtävät ennen osion takarajaa (ma 19.1.2026 klo 11:59 (keskipäivä)), voit saada DL-BONUS-pisteitä harjoitustehtäviin. Lue lisää suorittaminen-sivulta.
Ennen kuin aloitat tehtävien tekemisen, on syytä tutustua opintojakson eettisiin ohjeisiin.
Tee uusi IDEA-projekti nimeltään Viikko1 (ks. Luo uusi
projekti ohje). Lisää projektiin moduuli
Tehtava11 (ks. Luo Java-moduuli -ohje).
Lisää projektiin Java Compact File -tiedosto nimeltään OmatTiedot.java.
Kirjoita tiedostoon ohjelma, joka tulostaa kullekin eri riville
- nimesi,
- puhelimesi merkin
- puhelimesi mallin
Tee ohjelma, joka tulostaa konsolisyötteenä annetun merkkijonon sisältämien sanojen määrän. Voit olettaa, että sanat on eroteltu yhdellä välilyönnillä. Muita välimerkkejä ei tarvitse huomioida.
Ohjelman pitää tulostaa "Ei sanoja", jos syöte on tyhjä merkkijono.
Ohjelma lopettaa voi toimintansa tulosteen näyttämisen jälkeen. Ohjelman ei tarvitse kysyä syötettä jatkuvasti.
Testaa ohjelmaasi lukemalla käyttäjältä merkkijono ja tulostamalla sanojen määrä, esimerkiksi:
Sanojen määrä: 5
Tee ohjelma, joka lukee käyttäjältä ei-negatiivisia kokonaislukuja yksi rivi kerrallaan
silmukassa käyttäen
IO.readln()-metodia, kunnes käyttäjä antaa tyhjän merkkijonon.
Tallenna nämä luvut listaan.
Tee sitten aliohjelmat summa, keskiarvo, pienin ja suurin, jotka
laskevat listan pienimmän luvun, suurimman luvun, lukujen summan ja lukujen
keskiarvon. Tulosta aliohjelmien palauttamat arvot käyttäjälle.
Lisää aliohjelmiin sopiva käsittely tyhjille listoille ja dokumentoi ne.
Voit olettaa, että käyttäjä kirjoittaa vain ei-negatiivisia kokonaislukuja syötteenä. Jos aliohjelma saa syötteenä tyhjän listan, sen tulee palauttaa arvo -1.
Valmiiden Collections-luokan metodien, kuten Collections.min() ja
Collections.max(), käyttö on kielletty.
Vinkki
Voit muuntaa merkkijonon numeroksi käyttäen
Integer.parseInt(luku)-metodia.
Tee aliohjelma pakkaaMerkkijono,
joka ottaa parametrina String-merkkijonon
ja palauttaa uuden String-merkkijonon tiivistettynä siten,
että peräkkäiset samat merkit ilmoitetaan merkillä ja niiden lukumäärällä.
Esimerkiksi:
pakkaaMerkkijono("aaaabbbccd")palauttaisi merkkijonon"a4b3c2d1",pakkaaMerkkijono("00666663332222222")palauttaisi merkkijonon"02653327",pakkaaMerkkijono("Niiiiiin")palauttaisi merkkijonon"N1i6n1",pakkaaMerkkijono("nnNNnnnN")palauttaisi merkkijonon"n2N2n3N1",pakkaaMerkkijono("ohjelmointi")palauttaisi merkkijonon"o1h1j1e1l1m1o1i1n1t1i1".
Kirjoita aliohjelmalle myös sopiva dokumentaatiorivi ja lisää
ainakin yksi toimintaesimerkki main()-pääohjelmaan.
Vinkki 1
Käytä
StringBuilder-merkkijonoa
ja sen metodeja merkkijonon rakentamiseen.
Vinkki 2
Kokeile ratkaista ongelma ensin paperilla käsin lyhyelle jonolle
(esim. "aabb"). Mistä asioista on pidettävä kirjaa (muuttujat)?
Vinkki 3
Voi olla helpompaa aloittaa toisesta merkistä ja verrata se aina edeltävään:
Tee funktio onkoSalasanaVahva, joka tarkastaa parametrina
saadun salasanan (String)
vahvuuden. Salasanan tulee olla vähintään 8 merkkiä pitkä, sisältää yhden luvun,
sekä vähintään yhden suuren ja pienen kirjaimen.
Funktio palauttaa true, jos merkkijonona annettu salasana täyttää yllä
olevat vaatimukset, muuten se palauttaa false.
Kirjoita aliohjelmalle myös sopiva dokumentaatiorivi ja lisää
ainakin yksi toimintaesimerkki main()-pääohjelmaan.
Vinkki
Katso Character-luokan metodi
isDigit.
Esimerkiksi kutsumalla Character.isDigit(merkki) saat paluuarvona true,
jos merkki on numero, ja vastaavasti false, jos merkki ei ole numero.
Vastaavalla periaatteella toimivat myös metodit isUpperCase ja isLowerCase,
jotka löytyvät myös samasta luokasta.
Tee aliohjelma tulostaMatriisi, joka tulostaa kaikki parametrina
annetun kokonaislukumatriisin luvut samalle riville.
Aliohjelma ei palauta mitään.
Esimerkki aliohjelman toiminnasta
int[][] matriisi = {
{42, 2, 3},
{4, 67, 6},
{7, 8, 9}
};
tulostaMatriisi(matriisi);
Tulostuksen pitäisi silloin olla:
42 2 3 4 67 6 7 8 9
Tee ohjelma, joka kysyy käyttäjältä syötteen ja tulostaa, kuinka monta kertaa kukin numero (0–9) esiintyy syötteessä.
Esimerkiksi, jos käyttäjä antaa syötteenä 12223, ohjelma tulostaa:
1: 1 kpl
2: 3 kpl
3: 1 kpl
Vastaavasti, jos syötteenä annetaan 10002244412, ohjelma tulostaa.
0: 3 kpl
1: 2 kpl
2: 3 kpl
4: 3 kpl
Tulostamisen jälkeen ohjelma kysyy käyttäjältä uuden syötteen. Jos käyttäjä antaa tyhjän syötteen, ohjelman suoritus päättyy.
Vinkki
Yksittäisen merkin saa muunnettua kokonaisluvuksi
yhdistämällä
Character.toString
ja
Integer.parse:
int numeroLukuna = Integer.parseInt(Character.toString(a));
Huomaa, että Integer.parseInt olettaa, että annettu merkkijono on
todellakin numero; jos se sisältää jotain muuta kuin numeroa,
funktio heittää virheen.
Voit tarkistaa, että onko yksittäinen merkki numero käyttämällä
Character.isDigit-funktiota.
Tee funktio int puuttuvaLuku(int[] taulukko).
Funktiolle annetaan parametriksi taulukko, joka sisältää
luvut 1-N satunnaisessa järjestyksessä, mutta yksi luvuista puuttuu.
Funktion on palautettava luku, joka puuttuu.
Funktio ei saa aiheuttaa sivuvaikutuksia.
Esimerkiksi:
puuttuvaLuku(new int[] { 1, 6, 3, 4, 5 })palauttaa2puuttuvaLuku(new int[] { 8, 2, 4, 1, 3, 5, 6 })palauttaa7puuttuvaLuku(new int[] { })palauttaa1puuttuvaLuku(new int[] { 2 })palauttaa1
Voit käyttää alla olevaa apufunktiota satunnaisen taulukon luomiseksi:
int[] annaSyote(int maxLuku) {
Random r = new Random();
List<Integer> luvut = new ArrayList<>(IntStream.range(1, r.nextInt(2, maxLuku + 1)).boxed().toList());
Collections.shuffle(luvut);
luvut.remove(r.nextInt(luvut.size()));
return luvut.stream().mapToInt(Integer::intValue).toArray();
}
Voit käyttää aliohjelmaa seuraavasti:
// Tekee taulukon luvuista 1-10, mutta yksi luku puuttuu
int[] syote = annaSyote(10);
// Selvitetään, mikä luvuista puuttuu
int puuttuva = puuttuvaLuku(syote);
Tulosta kaikki alkuluvut väliltä 1-100.
Alkuluku on lukua 1 suurempi kokonaisluku, joka on jaollinen vain itsellään ja luvulla 1.
Vinkki
Tee ensin funktio onAlkuluku, joka saa parametrinaan kokonaisluvun ja
palauttaa totuusarvon, joka kertoo onko luku alkuluku vai ei. Käytä tätä
funktiota apuna pääohjelmassa, jossa tulostat silmukkaa apuna käyttäen kaikki
alkuluvut väliltä 1-100.