Tehtävät viikolle 1

Pakolliset tehtävät on merkitty harmalla taustavärillä. Punaisella taustavärillä merkatut ovat kontrollitehtäviä, jotka näytetään ohjaajalle harjoitustilaisuudessa!

HUOM: nimeä tiedostot otsikossa olevan sanan mukaan

Lämmittelyä

Tee koko tehtävä saman projektin sisään.

Nollasta sataan (NollastaSataan.java)

Tee ohjelma joka tulostaa seuraavan tulosteen.

0  100
1  99
2  98
3  97
...
99  1
100  0

Fizz

Muuta edellistä ohjelmaa siten, että se tulostaa jokaiselle kolmella jaolliselle luvulle merkkijonon Fizz. Käänteistä numerointia ei tarvitse enää toteuttaa.

Fizz
1
2
Fizz
4
...
98
Fizz
100

Buzz

Muuta edellistä ohjelmaa siten, että se tulostaa jokaiselle viidellä jaolliselle luvulle merkkijonon Buzz

Fizz
Buzz
1
2
Fizz
4
Buzz
Fizz
...
14
Fizz
Buzz
16
...
98
Fizz
Buzz

FizzBuzz

Muuta edellistä ohjelmaa siten, että se tulostaa jokaiselle kolmella JA viidellä jaolliselle luvulle merkkijonon FizzBuzz

FizzBuzz
1
2
Fizz
4
Buzz
Fizz
...
14
FizzBuzz
16
...
98
Fizz
Buzz

Opiskelija

Tee koko tehtävä saman projektin sisään.

Luokan täydennys

Alla on määritelty konstruktori ja metodit luokalle Opiskelija. Täydennä luokan toteutus annettujen vinkkien avulla. Opiskelija-luokan attribuuttien pitää olla luokan sisäisiä, eli tyyppiä private!

public class Opiskelija {
  // opiskelijalla on attribuutteina etunimi ja sukunimi

  // Opiskelija-luokan konstruktori asettaa olion etunimeksi ja sukunimeksi annetut parametrit,
  public Opiskelija(String etunimi, String sukunimi) {
  }
  
  // palauttaa etunimen
  public String annaEtunimi() {
  }
  
  // palauttaa sukunimen
  public String annaSukunimi() {
  }
    
  // palauttaa opiskelijan nimen 
  public String toString() {
  } 
}

Testaa luokan toimintaa alla olevan ohjelmapätkän avulla.

Opiskelija mattiP = new Opiskelija("Matti", "P");
Opiskelija mattiV = new Opiskelija("Matti", "V");

System.out.println(mattiP);
System.out.println();
System.out.println(mattiV);

Tulostuksen tulee olla seuraavanlainen:

Matti P

Matti V

Opiskelijanumero

Lisää luokalle Opiskelija metodi annaOpiskelijanumero(). Lisää luokkaan myös attribuutti opiskelijanumerolle. Toteuta opiskelijanumero siten, että uutta opiskelijaa luotaessa luodaan aina uusi opiskelijanumero. Aloita opiskelijanumeroiden numerointi miljoonasta. (Vihje: Käytä luokan sisäistä static-tyyppistä muuttujaa pitämään kirjaa viimeksi annetusta opiskelijanumerosta!). Muuta myös metodia toString() siten, että se tulostaa myös opiskelijanumeron.

Testaa luokan toimintaa alla olevan ohjelmapätkän avulla.

Opiskelija mattiP = new Opiskelija("Matti", "P");
Opiskelija mattiV = new Opiskelija("Matti", "V");

System.out.println(mattiP);
System.out.println();
System.out.println(mattiV);

Tulostuksen tulee olla seuraavanlainen:

Matti P (1000000)

Matti V (1000001)

Aseta Koepisteet

Lisää luokalle Opiskelija metodi asetaKoepisteet(int). Lisää luokkaan myös attribuutti, johon pisteet asetetaan. Koepisteet voivat saada arvon vain väliltä 0 ja 30. Muuta myös luokan toString()-metodia siten, että koepisteet tulostetaan opiskelija-oliota tulostettaessa.

Opiskelija mattiP = new Opiskelija("Matti", "P");
mattiP.asetaKoepisteet(25);
Opiskelija mattiV = new Opiskelija("Matti", "V");
mattiV.asetaKoepisteet(10);

System.out.println(mattiP);
System.out.println();
System.out.println(mattiV);

Tulostuksen tulee olla seuraavanlainen:

Matti P (1000000)
Koepisteet: 25

Matti V (1000001)
Koepisteet: 10

Aseta Harjoituspisteet

Lisää luokalle Opiskelija metodi asetaHarjoituspisteet(int). Lisää luokkaan myös attribuutti, johon pisteet asetetaan. Harjoituspisteet voivat saada arvon vain väliltä 0 ja 30. Muuta myös luokan toString() - metodia siten, että myös harjoituspisteet tulostetaan opiskelija-oliota tulostettaessa.

Testaa luokan toimintaa alla olevan ohjelmapätkän avulla.

Opiskelija mattiP = new Opiskelija("Matti", "P");
mattiP.asetaKoepisteet(25);
mattiP.asetaHarjoituspisteet(25);
Opiskelija mattiV = new Opiskelija("Matti", "V");
mattiV.asetaKoepisteet(10);
mattiV.asetaHarjoituspisteet(29);

System.out.println(mattiP);
System.out.println();
System.out.println(mattiV);

Tulostuksen tulee olla seuraavanlainen:

Matti P (1000000)
Koepisteet: 25
Harjoituspisteet: 25

Matti V (1000001)
Koepisteet: 10
Harjoituspisteet: 29

Arvosanan antaminen

Lisää luokalle metodi annaArvosana, joka palauttaa kyseiseen opiskelijaan liittyvän arvosanan. Muuta myös toString() - metodia siten, että se tulostaa myös arvosanan. Arvosana määräytyy seuraavan taulukon mukaan.

        Kokonaispisteet   Arvosana
        51-60             5
        46-50             4
        41-45             3
        36-40             2
        31-35             1
          -30             0
    

Huomaa myös kurssilla oleva koeleikkuri, eli kokeesta pitää saada vähintään 15 pistettä päästäkseen läpi.

Opiskelija mattiP = new Opiskelija("Matti", "P");
mattiP.asetaKoepisteet(25);
mattiP.asetaHarjoituspisteet(25);
Opiskelija mattiV = new Opiskelija("Matti", "V");
mattiV.asetaKoepisteet(10);
mattiV.asetaHarjoituspisteet(29);

System.out.println(mattiP);
System.out.println();
System.out.println(mattiV);

Tulostuksen tulee olla seuraavanlainen:

Matti P (1000000)
Koepisteet: 25
Harjoituspisteet: 25
Arvosana: 4

Matti V (1000001)
Koepisteet: 10
Harjoituspisteet: 29
Arvosana: 0

Arvosanan vertailu

Lisää luokalle metodi vertaaArvosanaa(Opiskelija opiskelija), joka vertaa this-opiskelijan arvosanaa parametrina annetun opiskelijan arvosanaan. Metodi palauttaa luvun -1, jos this-opiskelijan arvosana on suurempi, nollan jos sama, ja luvun 1 jos tämän opiskelijan arvosana on pienempi.

Opiskelija mattiP = new Opiskelija("Matti", "P");
mattiP.asetaKoepisteet(25);
mattiP.asetaHarjoituspisteet(25);
Opiskelija mattiV = new Opiskelija("Matti", "V");
mattiV.asetaKoepisteet(10);
mattiV.asetaHarjoituspisteet(29);
Opiskelija mattiL = new Opiskelija("Matti", "L");
mattiL.asetaKoepisteet(16);
mattiL.asetaHarjoituspisteet(29);


System.out.println(mattiP);
System.out.println();
System.out.println(mattiV);
System.out.println();
System.out.println(mattiP.vertaaArvosanaa(mattiV));

Tulostuksen tulee olla seuraavanlainen:

Matti P (1000000)
Koepisteet: 25
Harjoituspisteet: 25
Arvosana: 4

Matti V (1000001)
Koepisteet: 10
Harjoituspisteet: 29
Arvosana: 0

-1

Sukunimen vertailu

Lisää luokalle metodi vertaaSukunimea(Opiskelija opiskelija), joka vertaa this-opiskelijan sukunimeä parametrina annetun opiskelijan sukunimeen. Käytä String-luokassa valmiina olevaa compareTo()-metodia vertailun toteuttamiseen. Metodi palauttaa kokonaisluvun, joka kertoo järjestyksen.

Etunimen vertailu

Lisää luokalle metodi vertaaEtunimea(Opiskelija opiskelija), joka vertaa this-opiskelijan etunimeä parametrina annetun opiskelijan etunimeen. Käytä taas String-luokassa valmiina olevaa compareTo()-metodia vertailun toteuttamiseen. Metodi palauttaa kokonaisluvun, joka kertoo järjestyksen.

Vertailu toiseen opiskelijaan

Luo luokalle metodi compareTo(Opiskelija opiskelija), joka palauttaa negatiivisen arvon (esim. -1), jos this-opiskelija edeltää parametrina annettua opiskelijaa, positiivisen arvon (esim. +1) päinvastaisessa tapauksessa. Jos opiskelijat ovat kaikilta tiedoiltaan samat, metodi palauttaa arvon 0. Käytä järjestysperusteina 1. kokonaispistemäärää (laskevassa järjestyksessä), 2. sukunimeä, 3. etunimeä. Toteuta nimien järjestys aakkosjärjestyksessä, jonka String-luokan compareTo-metodi määrittelee.

Testaa vertailuoperaatiotasi seuraavan ohjelmapätkän avulla

Opiskelija mattiP = new Opiskelija("Matti", "P");
mattiP.asetaKoepisteet(25);
mattiP.asetaHarjoituspisteet(25);
Opiskelija mattiV = new Opiskelija("Matti", "V");
mattiV.asetaKoepisteet(10);
mattiV.asetaHarjoituspisteet(29);
Opiskelija mattiL = new Opiskelija("Matti", "L");
mattiL.asetaKoepisteet(16);
mattiL.asetaHarjoituspisteet(29);


Opiskelija mattiVViiteKopio = mattiV;

System.out.println(mattiP);
System.out.println();
System.out.println(mattiV);

if(mattiP.compareTo(mattiV) > -1) {
  System.out.println("Vertailuoperaatiosi taitaa toimia väärin..");
}

if(mattiV.compareTo(mattiP) < 1) {
  System.out.println("Vertailuoperaatiosi taitaa toimia väärin..");
}

if(mattiV.compareTo(mattiVViiteKopio) != 0) {
  System.out.println("Vertailuoperaatiosi taitaa toimia väärin..");
}

if(mattiV.compareTo(mattiL) < 1) {
  System.out.println("Vertailuoperaatiosi taitaa toimia väärin..");
}

Tulostuksen tulee olla seuraavanlainen:

Matti P (1000000)
Koepisteet: 25
Harjoituspisteet: 25
Arvosana: 4

Matti V (1000001)
Koepisteet: 10
Harjoituspisteet: 29
Arvosana: 0

Taulukot ja toistot

Tee koko tehtävä saman projektin sisään.

Laaditaan luokkametodeja, eli staattisia metodeja, taulukkojen käsittelyyn. Taulukot ovat tässä tehtävässä aina kokonaislukutaulukkoja.

Taulukon tulostaminen

Laadi metodi tulostaTaulukko(int[] taulukko), joka saa parametrikseen yksiulotteisen taulukon.

Testaa metodia seuraavalla ohjelmanpätkällä

int[] taul = {0, -5, 2};  
tulostaTaulukko(taul);

Tulostuksen tulee olla seuraavanlainen:

0 -5 2

Sisäkkäisen taulukon tulostaminen

Kuormita edellisen tehtävän metodi siten että osaa tulostaa kaksiulotteisen taulukon, eli on muotoa tulostaTaulukko(int[][] taulukko), joka saa parametrikseentaulukon. Voit käyttää edellisessä tehtävässä luotua metodia tässäkin tehtävässä.

Testaa metodia seuraavalla ohjelmanpätkällä

int[][] taul = {
    {0, -5, 2},
    {},
    {7, 18, -2},
    {1, 2, 3, 4}
};
    
tulostaTaulukko(taul);

Tulostuksen tulee olla seuraavanlainen:

0 -5 2 

7 18 -2 
1 2 3 4

Suurin luku

Laadi metodi taulukonSuurin(int[][] taulukko), joka palauttaa taulukon suurimman luvun. Jos taulukossa ei ole yhtään lukua, palautetaan luku 0.

int[][] taul = {
    {0, -5, 2},
    {},
    {7, 18, -2},
    {1, 2, 3, 4}
};

System.out.println("Suurin: " + taulukonSuurin(taul));

Tulostuksen tulee olla seuraavanlainen:

Suurin: 18

Pienin luku

Laadi metodi taulukonPienin(int[][] taulukko), joka palauttaa taulukon pienimmän luvun. Jos taulukossa ei ole yhtään lukua, palautetaan luku 0.

int[][] taul = {
    {0, -5, 2},
    {},
    {7, 18, -2},
    {1, 2, 3, 4}
};

System.out.println("Pienin: " + taulukonPienin(taul));

Tulostuksen tulee olla seuraavanlainen:

Pienin: -5

Hae

Laadi metodi hae(int[][] taulukko, int arvo), joka hakee taulukosta parametrina annettua lukua. Metodi palauttaa true jos arvo löytyy taulukosta, muuten false.

int[][] taul = {
    {0, -5, 2},
    {},
    {7, 18, -2},
    {1, 2, 3, 4}
};

int luku = -5;
if(hae(taul, luku)) {
  System.out.println(luku + " löytyi!");
}

luku = 42;
if(hae(taul, luku)) {
  System.out.println(luku + " löytyi!");
}

Tulostuksen tulee olla seuraavanlainen:

-5 löytyi!

Indeksien erotus

Laadi metodi joka asettaa jokaisen alkion arvoksi indeksien erotuksen. (Esimerkiksi alkio, jonka indeksit ovat [4][2] saa arvokseen 4-2, eli 2)

int[][] taul = {
    {0, -5, 2},
    {},
    {7, 18, -2},
    {1, 2, 3, 4}
};
    
tulostaTaulukko(taul);
System.out.println("-------");
indeksienErotus(taul);
tulostaTaulukko(taul);

Tulostuksen tulee olla seuraavanlainen:

0 -5 2 

7 18 -2 
1 2 3 4 
-------
0 -1 -2 

2 1 0 
3 2 1 0 

Olutmuistiot

Matit ovat suuria oluiden ystäviä. He pitävät kirjaa juomistaan olutmerkeistä, ja vertailevat myös juomien merkkiensä määrää. Toteutetaan Olutmuistio.

Olutmuistio

Olutmuistiossa lukee omistajan nimi. Toteuta Luokka olutmuistio, jolla on omistajan nimen ottava konstruktori ja seuraavat metodit

Testaa olutmuistiota seuraavan ohjelmapätkän avulla

Olutmuistio muistio = new Olutmuistio("Matti L");
System.out.println(muistio);

Tulostuksen tulee olla seuraavanlainen:

Olutmuistion omistaja: Matti L

Oluiden lisääminen

Lisää Olutmuistio-luokalle metodi lisaaOlut(String olutmerkki), joka lisää muistioon olutmerkin jos sitä ei ole jo listassa. Lisää luokalle myös ArrayList<String>-tyyppinen attribuutti nimeltä olutlista, jossa pidetään kirjaa oluista. Varmista että luot tyhjän listan luokan konstruktorissa! Muuta myös toString()-metodia siten, että se tulostaa juodut oluet. Merkki "\t" lisää tulostukseen sisennyksen.

Testaa olutmuistiota seuraavan ohjelmapätkän avulla

 
Olutmuistio muistio = new Olutmuistio("Matti L");
muistio.lisaaOlut("Ballast Point: Panzer Imperial Pils");
muistio.lisaaOlut("Ballast Point: Panzer Imperial Pils");
muistio.lisaaOlut("Stone Brewery: Arrogant Bastard ALE");
muistio.lisaaOlut("Ballast Point: Panzer Imperial Pils");
muistio.lisaaOlut("Souther Tier: Gemini");
muistio.lisaaOlut("Ballast Point: Panzer Imperial Pils");
muistio.lisaaOlut("Ballast Point: Panzer Imperial Pils");
System.out.println(muistio);

Tulostuksen tulee olla seuraavanlainen:

Olutmuistion omistaja: Matti L
Juodut oluet
  Stone Brewery: Arrogant Bastard ALE
  Ballast Point: Panzer Imperial Pils
  Souther Tier: Gemini

Oluiden määrä

Lisää Olutmuistio-luokalle metodi juodutOluet(), joka palauttaa juotujen oluiden lukumäärän. Muuta luokan toString() - metodia siten, että se tulostaa myös juotujen oluiden lukumäärän.

Testaa olutmuistiota seuraavan ohjelmapätkän avulla

Olutmuistio muistio = new Olutmuistio("Matti L");
muistio.lisaaOlut("Ballast Point: Panzer Imperial Pils");
muistio.lisaaOlut("Ballast Point: Panzer Imperial Pils");
muistio.lisaaOlut("Stone Brewery: Arrogant Bastard ALE");
muistio.lisaaOlut("Ballast Point: Panzer Imperial Pils");
muistio.lisaaOlut("Souther Tier: Gemini");
muistio.lisaaOlut("Ballast Point: Panzer Imperial Pils");
muistio.lisaaOlut("Ballast Point: Panzer Imperial Pils");
System.out.println(muistio);

Tulostuksen tulee olla seuraavanlainen:

Olutmuistion omistaja: Matti L
Juodut oluet
  Stone Brewery: Arrogant Bastard Ale
  Ballast Point: Panzer Imperial Pils
  Souther Tier: Gemini
Yhteensä 3 kpl

Uusien olutmuistioiden luominen

Luo pääohjelma Kirjausohjelma, jossa luodaan syötetyille nimille lista olutmuistioita. Olutmuistioiden luominen lopetetaan kun annetaan tyhjä nimi. Kun muistioiden luominen lopetetaan, olutmuistioiden omistajat tulostetaan. Käytä ArrayList-listaa olutmuistioiden tallentamiseen!

Tulostuksen tulee olla seuraavanlainen

Lisätään muistioita
Anna muistion omistaja: Matti P

Anna muistion omistaja: Matti V

Anna muistion omistaja: Matti L

Anna muistion omistaja: 


Muistiot: 
Matti P
Matti V
Matti L

Olutmuistion valinta

Lisää Kirjausohjelmaan mahdollisuus muistion valintaan. Muuta olutmuistioiden tulostusta siten, että tulostat myös muistion indeksin ArrayList-tyyppisessä listassa. Kun muistion on valittu, tulosta sen nimi. Lopeta muistion valitseminen käyttäjä syöttää arvon -1. Voit käyttää muistion lukemiseen esimerkiksi seuraavaa koodinpätkää int muistionIndeksi = Integer.parseInt(lukija.nextLine());

Tulostuksen tulee olla seuraavanlainen

Lisätään muistioita
Anna muistion omistaja: Matti P

Anna muistion omistaja: Matti V

Anna muistion omistaja: Matti L

Anna muistion omistaja: 


Muistiot: 
0 - Matti P
1 - Matti V
2 - Matti L

Valitse muistio, -1 lopettaa: 1
Olutmuistio Matti V valittu

Valitse muistio, -1 lopettaa: 0
Olutmuistio Matti P valittu

Valitse muistio, -1 lopettaa: -1

Olutmuistioiden täyttäminen

Lisää Kirjausohjelmaan toiminto jossa listan valinnan jälkeen syötetään juodun oluen nimi. Kun oluen nimi on syötetty, se lisätään valittuun olutmuistioon. Jos käytät muistion valintaan koodipätkää int muistionIndeksi = Integer.parseInt(lukija.nextLine());, et törmää ongelmiin oluen nimen syöttämisessä. Kun oluiden syöttäminen lopetetaan, tulostetaan tämän hetkinen listatilanne.

Tulostuksen tulee olla seuraavanlainen

 
Valitse muistio johon olut kirjataan, tai syötä -1 lopettaaksesi: 
2
Mikä olut: Stone Brewery: Arrogant Bastard Ale

Muistiot: 
0 - Matti P
1 - Matti V
2 - Matti L
Valitse muistio johon olut kirjataan, tai syötä -1 lopettaaksesi: 
2
Mikä olut: Ballast Point: Panzer Imperial Pils

Muistiot: 
0 - Matti P
1 - Matti V
2 - Matti L
Valitse muistio johon olut kirjataan, tai syötä -1 lopettaaksesi: 
-1

Tulostetaan muistiot:
Olutmuistion omistaja: Matti P
Oluita yhteensa 0 kpl

Olutmuistion omistaja: Matti V
Oluita yhteensa 0 kpl

Olutmuistion omistaja: Matti L
Oluita yhteensa 2 kpl
  Stone Brewery: Arrogant Bastard Ale
  Ballast Point: Panzer Imperial Pils

Kurssikirjaukset

Toteutetaan ohjelma kurssin hallintaan. Voit käyttää ensimmäisessä tehtävässä toteutettua Opiskelija-luokkaa tässä tehtävässä.

Kurssi

Kurssilla on nimi ja sille kuuluu ei-rajattu määrä opiskelijoita. Toteuta luokka Kurssi, jolla on konstruktori Kurssi(String nimi), sekä metodit lisaaOpiskelija(Opiskelija o) ja annaOpiskelijat(). Metodi annaOpiskelijat() palauttaa ArrayList-tyyppisen listan. Toteuta myös toString() - metodi, joka palauttaa kurssin nimen sekä listan osallistujista (käytä annaOpiskelijat()-metodia opiskelijoiden hakemiseen toString()-metodissa!). Merkki "\t" lisää sisennyksen tulostettuun tekstiin.

Testaa kurssin toteutusta seuraavan ohjelmapätkän avulla.

Kurssi java2100 = new Kurssi("Java 2100");
java2100.lisaaOpiskelija(new Opiskelija("Matti", "P"));
java2100.lisaaOpiskelija(new Opiskelija("Matti", "L"));
java2100.lisaaOpiskelija(new Opiskelija("Matti", "V"));
System.out.println(java2100);

Tulostuksen tulee olla seuraavanlainen:

Kurssi Java 2100
Opiskelijoita 3
  Matti P
  Matti L
  Matti V

Kurssille kirjautuminen

Luo pääohjelma Kirjaaminen, jossa listalle lisätään uusia opiskelijoita. Tyhjä syöte etunimen tai sukunimen kohdalla nopettaa kirjaamisen. Tulosta lopuksi kirjatut opiskelijat. Voit käyttää kurssin nimenä "Java 2100":aa.

Tulostuksen tulee olla seuraavanlainen:

Uusi opiskelija:
Etunimi: Matti
Sukunimi: P

Uusi opiskelija:
Etunimi: Matti
Sukunimi: L

Uusi opiskelija:
Etunimi: Matti
Sukunimi: V

Uusi opiskelija:
Etunimi: 

Kurssi Java 2100
Opiskelijoita 3
  Matti P
  Matti L
  Matti V

Tulosten kirjaus

Kun opiskelijat on kirjattu, kirjataan jokaiselle tulokset. Jos kirjatut pisteet jakauman 0-30 ulkopuolella, pyydetään arvosanaa uudestaan. Käytä Opiskelija-luokan asetaKoepisteet ja asetaHarjoituspisteet - metodeja pisteiden asettamiseen.

Tulostuksen tulee olla seuraavanlainen:

Uusi opiskelija:
Etunimi: Matti
Sukunimi: P

Uusi opiskelija:
Etunimi: Matti
Sukunimi: L

Uusi opiskelija:
Etunimi: Matti
Sukunimi: V

Uusi opiskelija:
Etunimi: 

Kurssi Java 2100
Opiskelijoita 3
  Matti P
  Matti L
  Matti V
  
Kirjataan tulokset:
Opiskelija Matti P koepisteet: 12
Opiskelija Matti P harjoituspisteet: 18

Opiskelija Matti L koepisteet: 15
Opiskelija Matti L harjoituspisteet: 42
Opiskelija Matti L harjoituspisteet: 31
Opiskelija Matti L harjoituspisteet: 15

Opiskelija Matti L koepisteet: 18
Opiskelija Matti L harjoituspisteet: 16

Kurssin arvostelu

Kun tulokset on kirjattu halutaan tehdä vielä kurssin arvostelu. Käytä ohjelmoinnin perusteiden viikolla 3 toteutettua Arvosanajakauman tulostusta kirjattujen arvosanojen tulostamiseen. Arvosanojen tulostamiseen löytyy myös esimerkkivastaus, jonka pohjalta voit työstää tehtävää http://www.cs.helsinki.fi/group/java/k10/ohpe/esimerkkivastaukset/viikko3/6_2_Arvosanajakauma2/Arvosanajakauma.java

Tulostuksen tulee olla seuraavanlainen:

Uusi opiskelija:
Etunimi: Matti
Sukunimi: P

Uusi opiskelija:
Etunimi: Matti
Sukunimi: L

Uusi opiskelija:
Etunimi: Matti
Sukunimi: V

Uusi opiskelija:
Etunimi: 

Kurssi Java 2100
Opiskelijoita 3
  Matti P
  Matti L
  Matti V
  
Kirjataan tulokset:
Opiskelija Matti P koepisteet: 12
Opiskelija Matti P harjoituspisteet: 18

Opiskelija Matti L koepisteet: 15
Opiskelija Matti L harjoituspisteet: 42
Opiskelija Matti L harjoituspisteet: 31
Opiskelija Matti L harjoituspisteet: 16

Opiskelija Matti V koepisteet: 21
Opiskelija Matti V harjoituspisteet: 25

Kurssin Java 2100 arvosanajakauma

5: 
4: * 
3: 
2: 
1: *
0: *

Hyväksyttyjä 66% osallistujista

Sokkelo

Useat ongelmat, muunmuassa reitinhaku, voidaan ajatella sokkeloina ja niistä pois pääsemisenä. Toteutetaan pieni sokkelo-ohjelma.

Sokkelon tulostaminen

Toteuta metodi joka tulostaa sisäkkäisen taulukon sokkelona. Tulosta kakkonen "O":na, ykkönen "X":nä, nolla tyhjänä (" "), ja -1 "M":nä. Kannattaa tehdä erillinen metodi joka palauttaa merkin annetulle luvulle! Testaa seuraavalla ohjelmanpätkällä

int[][] taulukko = 
{
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
    {1, 2, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
    {1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1},
    {1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1},
    {1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1},
    {1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1},
    {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, -1},
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}       
};
tulostaSokkelo(sokkelo);

Tulostuksen tulee olla seuraavanlainen:

XXXXXXXXXXXXX
XO  X X     X
X X   X XXX X
X XXX     X X
X X X XXX   X
X X   X X X X
X   X     X M
XXXXXXXXXXXXX

Sokkelo

Luo luokka Sokkelo, joka saa parametrina sisäkkäisen kokonaislukutaulukon. Luokalla Sokkelo on myös metodi toString(), joka tulostaa sokkelon.

Testaa Sokkelo-luokan toteutusta seuraavalla koodinpätkällä

int[][] taulukko = 
{
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
    {1, 2, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
    {1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1},
    {1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1},
    {1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1},
    {1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1},
    {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, -1},
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}       
};
Sokkelo s = new Sokkelo(taulukko);
System.out.println(s);

Tulostuksen tulee olla seuraavanlainen:

XXXXXXXXXXXXX
XO  X X     X
X X   X XXX X
X XXX     X X
X X X XXX   X
X X   X X X X
X   X     X M
XXXXXXXXXXXXX

Pelaaja

Kokonaislukutaulukon numero 2 kuvaa pelaajan sijaintia. Luo luokka Pelaaja, joka sisältää pelaajan x- ja y-koordinaatit eli sijainnin sokkelossa. Lisää luokalle myös toString()-metodi, joka tulostaa pelaajan sijainnin. Lisää Pelaaja Sokkelo-luokan attribuutiksi, ja muuta Sokkelo-luokan konstruktoria siten, että sitä kutsuttaessa käydään läpi annettu taulukko, ja luodaan pelaaja siihen indeksiin, mistä numero 2 löytyy.

Lisää sokkelon toString() metodiin myös pelaajan tulostus.

int[][] taulukko = 
{
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
    {1, 2, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
    {1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1},
    {1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1},
    {1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1},
    {1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1},
    {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, -1},
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}       
};
Sokkelo s = new Sokkelo(taulukko);
System.out.println(s);

Tulostuksen tulee olla seuraavanlainen:

XXXXXXXXXXXXX
XO  X X     X
X X   X XXX X
X XXX     X X
X X X XXX   X
X X   X X X X
X   X     X M
XXXXXXXXXXXXX
Pelaaja sijainnissa (1, 1)

Liikkuminen

Lisää ohjelmaan toiminto, jolla pyydetään liikkumissuuntaa pelaajalle. Liikkumissuunnat ovat "a" (alas), "y" (ylös"), "v" (vasemmalle) ja "o" (oikealle). Jos pelaaja ei pysty liikkumaan haluttuun suuntaan, tulosta virheviesti. Muutoin, siirrä pelaajaa haluttuun suuntaan. Ohjelman voi lopettaa tyhjällä syötteellä.

Pelattaessa yllä annetulla taulukolla tulostuksen tulee olla seuraavanlainen:

Tulostuksen tulee olla seuraavanlainen:

XXXXXXXXXXXXX
XO  X X     X
X X   X XXX X
X XXX     X X
X X X XXX   X
X X   X X X X
X   X     X M
XXXXXXXXXXXXX
Pelaaja sijainnissa (1, 1)

Anna liikkumissuunta: o
XXXXXXXXXXXXX
X O X X     X
X X   X XXX X
X XXX     X X
X X X XXX   X
X X   X X X X
X   X     X M
XXXXXXXXXXXXX
Pelaaja sijainnissa (2, 1)

Anna liikkumissuunta: y
Ei voi liikkua!
Anna liikkumissuunta: o
XXXXXXXXXXXXX
X  OX X     X
X X   X XXX X
X XXX     X X
X X X XXX   X
X X   X X X X
X   X     X M
XXXXXXXXXXXXX
Pelaaja sijainnissa (3, 1)

Anna liikkumissuunta: 

Maali!

Numero -1 kuvaa maalia minne pelaajan on tarkoitus päästä. Muuta peliä siten, että kun pelaaja on maalissa peli loppuu.

Tulostuksen tulee olla seuraavanlainen:

XXXXXXXXXXXXX
XO  X X     X
X X   X XXX X
X XXX     X X
X X X XXX   X
X X   X X X X
X   X     X M
XXXXXXXXXXXXX
Pelaaja sijainnissa (1, 1)

Anna liikkumissuunta: o
XXXXXXXXXXXXX
X O X X     X
X X   X XXX X
X XXX     X X
X X X XXX   X
X X   X X X X
X   X     X M
XXXXXXXXXXXXX
Pelaaja sijainnissa (2, 1)

Anna liikkumissuunta: y
Ei voi liikkua!
Anna liikkumissuunta: o
XXXXXXXXXXXXX
X  OX X     X
X X   X XXX X
X XXX     X X
X X X XXX   X
X X   X X X X
X   X     X M
XXXXXXXXXXXXX
Pelaaja sijainnissa (3, 1)

Anna liikkumissuunta: a
XXXXXXXXXXXXX
X   X X     X
X XO  X XXX X
X XXX     X X
X X X XXX   X
X X   X X X X
X   X     X M
XXXXXXXXXXXXX
Pelaaja sijainnissa (3, 2)
Anna liikkumissuunta: o

.......

Anna liikkumissuunta: a
XXXXXXXXXXXXX
X   X X     X
X X   X XXX X
X XXX     X X
X X X XXX   X
X X   X X X X
X   X     XOM
XXXXXXXXXXXXX
Pelaaja sijainnissa (11, 6)

Anna liikkumissuunta: o

-- MAALI! --