Tehtävät viikolle 3

Tehtävät tehdään harjoitussaleissa.

Pakolliset tehtävät on merkitty harmalla taustavärillä. Pakollisuus tarkoittaa oikeastaan hyvin voimakasta suositusta tehtävän tekemiseen. Jos pakollisia jää tekemättä, on suuri riski, että seuraavalla viikolla esitellään asioita jotka oletetetaan jo osatuiksi ja pakollisten tehtävien kautta harjoitelluiksi.

Muutama NetBeans-vihje

Merkkijonon merkit

Voit halutessasi tehdä tehtävät 1.1.-1.5 samaan ohjelmaan.

Nimen pituus

Tee ohjelma, joka kysyy käyttäjän nimen ja ilmoittaa, kuinka monta kirjainta siinä on.

Anna nimi: Pekka
Kirjainmäärä: 5
Anna nimi: Katariina
Kirjainmäärä: 9

Ensimmäinen kirjain

Tee ohjelma, joka kysyy käyttäjän nimen ja ilmoittaa nimen ensimmäisen kirjaimen.

Anna nimi: Pekka
Ensimmäinen kirjain: P
Anna nimi: Katariina
Ensimmäinen kirjain: K

Viimeinen kirjain

Tee ohjelma, joka kysyy käyttäjän nimen ja ilmoittaa nimen viimeisen kirjaimen.

Anna nimi: Pekka
Viimeinen kirjain: a
Anna nimi: Katariina
Viimeinen kirjain: a

Kirjaimet erikseen

Tee ohjelma, joka kysyy käyttäjän nimen ja ilmoittaa sen kirjaimet erikseen.

Anna nimi: Pekka
1. kirjain: P
2. kirjain: e
3. kirjain: k
4. kirjain: k
5. kirjain: a
Anna nimi: Katariina
1. kirjain: K
2. kirjain: a
3. kirjain: t
4. kirjain: a
5. kirjain: r
6. kirjain: i
7. kirjain: i
8. kirjain: n
9. kirjain: a

Nimen kääntäminen

Tee ohjelma, joka kysyy käyttäjän nimen ja tulostaa sen väärinpäin.

Anna nimi: Pekka
Väärinpäin: akkeP
Anna nimi: Katariina
Väärinpäin: aniirataK

Lisää merkkijonoista

Alkuosa

Tee ohjelma, joka tulostaa sanan alkuosan. Ohjelma kysyy käyttäjältä sanan ja alkuosan pituuden. Käytä ohjelmassa metodia substring.

Anna sana: esimerkki
Alkuosan pituus: 4
Tulos: esim
Anna sana: esimerkki
Alkuosan pituus: 7
Tulos: esimerk

Loppuosa

Tee ohjelma, joka tulostaa sanan loppuosan. Ohjelma kysyy käyttäjältä sanan ja loppuosan pituuden. Käytä ohjelmassa metodia substring.

Anna sana: esimerkki
Loppuosan pituus: 4
Tulos: rkki
Anna sana: esimerkki
Loppuosan pituus: 7
Tulos: imerkki

Sana sanassa

Tee ohjelma, joka kysyy käyttäjältä kaksi sanaa. Sitten ohjelma kertoo, onko toinen sana ensimmäisen sanan osana. Käytä ohjelmassa metodia indexOf.

Anna 1. sana: suppilovahvero
Anna 2. sana: ilo
Sana 'ilo' on sanan 'suppilovahvero' osana.
Anna 1. sana: suppilovahvero
Anna 2. sana: suru
Sana 'suru' ei ole sanan 'suppilovahvero' osana.

Omia metodeita

Tekstin tulostus

Tee metodi tulostaTeksti, joka tulostaa tekstin "Alussa olivat suo, kuokka ja Java." sekä rivinvaihdon.

private static void tulostaTeksti() {
    // kirjoita koodia tähän
}

public static void main(String[] args) {
    tulostaTeksti();
}

Ohjelman tulostus:

Alussa olivat suo, kuokka ja Java.

Monta tulostusta

Laajenna edellistä ohjelmaasi siten, että pääohjelma kysyy käyttäjältä, montako kertaa teksti tulostetaan eli montako kertaa metodia kutsutaan.

private static void tulostaTeksti() {
    // kirjoita koodia tähän
}

public static void main(String[] args) {
    // kysy käyttäjältä, montako kertaa teksti tulostetaan
    // kutsu metodia tulostaTeksti silmukassa
}

Ohjelman tulostus:

Kuinka monta? 7
Alussa olivat suo, kuokka ja Java.
Alussa olivat suo, kuokka ja Java.
Alussa olivat suo, kuokka ja Java.
Alussa olivat suo, kuokka ja Java.
Alussa olivat suo, kuokka ja Java.
Alussa olivat suo, kuokka ja Java.
Alussa olivat suo, kuokka ja Java.

Lisää omia metodeita

Tämän kohdan tehtävät kannattaa tehdä samaan tiedostoon.

Tähtien tulostus

Tee metodi tulostaTahtia, joka tulostaa annetun määrän tähtiä ja rivinvaihdon.

Tee metodi seuraavaan runkoon:

private static void tulostaTahtia(int maara) {
    // kirjoita koodia tähän
}

public static void main(String[] args) {
    tulostaTahtia(5);
    tulostaTahtia(3);
    tulostaTahtia(9);
}

Ohjelman tulostus:

*****
***
*********

Viestin tulostus

Tee metodi tulostaViesti, joka tulostaa annetun viestin tähdillä reunustettuna. Käytä metodissa apuna metodia tulostaTahtia.

Tee ohjelma seuraavaan runkoon:

private static void tulostaViesti(String viesti) {
    // kirjoita koodia tähän
}

public static void main(String[] args) {
    tulostaViesti("Tervetuloa!");
    tulostaViesti("ABC");
    tulostaViesti("Hei hei!");
}

Ohjelman tulostus:

***************
* Tervetuloa! *
***************
*******
* ABC *
*******
************
* Hei hei! *
************

Viestien tulostus

Tee metodi tulostaViestit, joka tulostaa taulukossa annetut viestit tähdillä reunustettuina. Käytä metodissa apuna metodia tulostaViesti.

private static void tulostaViestit(String [] viestit) {
    // kirjoita koodia tähän
}

public static void main(String[] args) {
    String [] taulukko = {"Tervetuloa", "ABC", "Hei hei!"};
    tulostaViestit(taulukko);
}

Ohjelman tulostus:

***************
* Tervetuloa! *
***************
*******
* ABC *
*******
************
* Hei hei! *
************

Merkkien tulostus

Tee metodi tulostaMerkkeja, joka tulostaa annetun määrän annettuja merkkejä.

Tee ohjelma seuraavaan runkoon:

private static void tulostaMerkkeja(int maara, char merkki) {
    // kirjoita koodia tähän
}

public static void main(String[] args) {
    tulostaMerkkeja(5, 'A');
    tulostaMerkkeja(3, 'B');
    tulostaMerkkeja(9, 'C');
}

Ohjelman tulostus:

AAAAA
BBB
CCCCCCCCC

Paluuarvo

Lukujen summa

Tee metodi summa, joka laskee taulukon lukujen summan.

Tee metodi seuraavaan runkoon:

private static int summa(int [] luvut) {
    // kirjoita koodia tähän
}

public static void main(String[] args) {
    int [] taulukko = {3, 2, 7, 2};
    System.out.println("Summa: " + summa(taulukko));
}

Ohjelman tulostus:

Summa: 14

Lukujen keskiarvo

Tee metodi keskiarvo, joka laskee taulukon lukujen keskiarvon. Metodissa kannattaa käyttää apuna metodia summa.

Tee metodi seuraavaan runkoon:

private static double keskiarvo(int [] luvut) {
    // kirjoita koodia tähän
}

public static void main(String[] args) {
    int [] taulukko = {3, 2, 7, 2};
    System.out.println("Keskiarvo: " + keskiarvo(taulukko));
}

Ohjelman tulostus:

Keskiarvo: 3.5

Pienin

Tee metodi pienin , joka palauttaa taulukon pienimmän luvun.

private static int pienin(int [] luvut) {
    // kirjoita koodia tähän
}

public static void main(String[] args) {
    int [] taulukko = {3, 2, 7, 2};
    System.out.println("Pienin: " + pienin(taulukko));
}

Ohjelman tulostus:

Pienin: 2

Suurin

Tee metodi suurin, joka palauttaa taulukon suurimman luvun.

private static int suurin(int [] luvut) {
    // kirjoita koodia tähän
}

public static void main(String[] args) {
    int [] taulukko = {3, 2, 7, 2};
    System.out.println("Suurin: " + suurin(taulukko));
}

Ohjelman tulostus:

Suurin: 7

Varianssi

Tee metodi varianssi, joka palauttaa taulukon lukujen otosvarianssin. Ohjeen varianssin laskemiseksi voit katsoa esimerkiksi Wikipediasta kohdasta populaatio- ja otosvarianssi.

private static double varianssi(int [] luvut) {
    // kirjoita koodia tähän
}

public static void main(String[] args) {
    int [] taulukko = {3, 2, 7, 2};
    System.out.println("Varianssi: " + varianssi(taulukko));
}

Ohjelman tulostus:

Varianssi: 5.666667

(Lukujen keskiarvo on 3.5, joten otosvarianssi on ((3 - 3.5)² + (2 - 3.5)² + (7 - 3.5)² + (2 - 3.5)²)/(4 - 1) ≈ 5,666667.)

Lisää metodeja

Onko luku taulukossa

Tee metodi onkoLukuTaulukossa, joka saa parametrinaan int-taulukon ja int-luvun. Jos luku on taulukossa, metodi palauttaa true ja muulloin false.

Ohjelman rakenne on seuraava:

private static boolean onkoLukuTaulukossa(int[] taulukko, int luku) {
    // kirjoita koodia tähän
}

public static void main(String[] args) {
    int[] luvut = {1, 3, 5, 7};
    System.out.println("Anna luku: ");
    int luku = Integer.parseInt(lukija.nextLine());
    if (onkoLukuTaulukossa(luvut, luku)) {
        System.out.println(luku + " on taulukossa.");
    } else {
        System.out.println(luku + " ei ole taulukossa.");
    }
}
Anna luku: 3
Luku on taulukossa.
Anna luku: 4
Luku ei ole taulukossa.

Lukujen kysyminen

Tee metodi kysyLuvut, joka kysyy käyttäjältä lukuja ja palauttaa ne taulukkona. Liitä pääohjelmaan myös ohjelmaan mukaan tehtävien 5.1 ja 5.2 metodit summa ja keskiarvo.

Sinun täytyy luoda palautettava taulukko metodin sisällä. Taulukon luominen onnistuu vastaavalla tavalla kuin taulukon luominen hoidettiin viikolla 2 main-metodissa.

private static int [] kysyLuvut() {
    // kirjoita koodia tähän
}

public static void main(String[] args) {
    int [] luvut = kysyLuvut();
    System.out.println("Summa: " + summa(luvut));
    System.out.println("Keskiarvo: " + keskiarvo(luvut));
}
Kuinka monta lukua? 3
Anna luvut:
5
2
11
Summa: 18
Keskiarvo: 6.0

Arvauspeli

Tee yksinkertainen arvauspeli. Pelin toiminta alkaa sillä, että käyttäjältä kysytään arvattavat luvut:

Kuinka monta lukua? 3
Anna luvut:
5
2
11
Kiitos. Siirrytään arvausvaiheeseen.

Kun luvut on syötetty, tulostetaan 40 rivinvaihtoa kutsumalla komentoa System.out.println("") 40 kertaa.

Tämän jälkeen käyttäjälle (joka on kenties eri ihminen kun lukujen syöttäjä) annetaan 3 arvausta. Arvausten jälkeen ilmoitetaan, kuinka monta arvauksista oli oikein.

Arvaa mitä lukuja taulukossa on.
Saat kolme arvausta.
4
99
2
Kiitos arvauksista. 1 oikein.

Tee peli käyttäen kahden edellisen tehtävän metodeja. Pääohjelma muotoutuu seuraavaan tapaan:

public static void main(String[] args) {
    int [] luvut = kysyLuvut();
    // tulosta tyhjää

    int oikeatArvaukset = 0;    
    // kolme arvausta
    for ( int i=0; i<3; i++ ) {
       // lue arvaus
       // tarkasta metodin onkoLukuTaulukossa avulla menikö arvaus oikein ja päivitä statistiikka
    }
    // tulosta oikeiden vastausten määrä    
}

Arvauspeli versio 2.0

Laajennetaan edellistä tehtävää niin, että pelaajalla on rajaton määrä arvauksia. Kun käyttäjä antaa syötteenä -99, loppuu peli ja käyttäjälle ilmoitetaan arvausten lukumäärä ja oikeiden arvausten lukumäärä. Peli etenee seuraavasti:

Arvaa mitä lukuja taulukossa on.
Kun kyllästyt, syötä -99.
4
7
2
100
11
-99
Arvauksia oli 5, joista oikein 2.

Arvauspeli versio 3.0

Laajennetaan edellistä tehtävää siten, että ohjelma kysyy pelin jälkeen, haluaako käyttäjä pelata uudestaan. Lopuksi ohjelma ilmoittaa, kuinka monta peliä pelattiin yhteensä.

Arvaa mitä lukuja taulukossa on. Kun kyllästyt, syötä -99.
4
7
2
100
11
-99
Arvauksia oli 5, joista oikein 2.

Uusi peli (k/e)? k

Arvaa mitä lukuja taulukossa on. Kun kyllästyt, syötä -99.
-1
5
2
-99
Arvauksia oli 3, joista oikein 0.

Uusi peli (k/e)? e

Pelaajia tänään 2.

Merkkijonon kääntäminen

Tee metodi kaanna, joka kääntää annetun merkkijonon.

Tee metodi seuraavaan runkoon:

private static String kaanna(String merkkijono) {
    // kirjoita koodia tähän
}

public static void main(String[] args) {
    System.out.print("Anna merkkijono: ");
    String merkkijono = lukija.nextLine();
    System.out.println("Väärinpäin: " + kaanna(merkkijono));
}

Vihje: joudut todennäköisesti kokoamaan metodin sisällä käänteisen merkkijonon merkki kerrallaan. Kokoamisessa kannattaa käyttää apuna String-tyyppistä apumuuttujaa. Aluksi apumuuttujan arvo on tyhjä merkkijono. Tämän jälkeen merkkijonon perään laitetaan uusia merkkejä merkki kerrallaan.

  String apu = "";

  // ...
  // aletaan lisäilemään merkkejä apu:n perään
  apu = apu + merkki;

Ohjelman tulostus:

Anna merkkijono: esimerkki
ikkremise

Palindromi

Tee metodi palindromi, joka kertoo, onko merkkijono palindromi (merkkijonon sisältö on sama alusta loppuun ja lopusta alkuun luettuna).

Metodin kannattaa käyttää metodia kaanna. Metodin tyyppi on boolean, joten se palauttaa joko arvon true (merkkijono on palindromi) tai false (merkkijono ei ole palindromi).

private static boolean palindromi(String merkkijono) {
    // kirjoita koodia tähän
}

public static void main(String[] args) {
    System.out.println("Anna merkkijono: ");
    String merkkijono = lukija.nextLine();    
    if (palindromi(merkkijono)) {
	System.out.println("Merkkijono on palindromi!");
    } else {
	System.out.println("Merkkijono ei ole palindromi!");
    }
}

Ohjelman tulostuksia:

Anna merkkijono: saippuakauppias
Merkkijono on palindromi!
Anna merkkijono: esimerkki
Merkkijono ei ole palindromi!