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
Tee koko tehtävä saman projektin sisään.
Tee ohjelma joka tulostaa seuraavan tulosteen.
0 100 1 99 2 98 3 97 ... 99 1 100 0
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
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
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
Tee koko tehtävä saman projektin sisään.
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
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)
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
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
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
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
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.
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.
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
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.
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
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
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
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
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!
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
Matit ovat suuria oluiden ystäviä. He pitävät kirjaa juomistaan olutmerkeistä, ja vertailevat myös juomien merkkiensä määrää. Toteutetaan Olutmuistio.
Olutmuistiossa lukee omistajan nimi. Toteuta Luokka olutmuistio, jolla on omistajan nimen ottava konstruktori ja seuraavat metodit
kenenMuistio()
- palauttaa olutmuistion omistajan nimentoString()
- luo muistiosta merkkijonoesityksenTestaa olutmuistiota seuraavan ohjelmapätkän avulla
Olutmuistio muistio = new Olutmuistio("Matti L"); System.out.println(muistio);
Tulostuksen tulee olla seuraavanlainen:
Olutmuistion omistaja: Matti L
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
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
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
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
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
Toteutetaan ohjelma kurssin hallintaan. Voit käyttää ensimmäisessä tehtävässä toteutettua Opiskelija-luokkaa tässä tehtävässä.
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
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
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
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
Useat ongelmat, muunmuassa reitinhaku, voidaan ajatella sokkeloina ja niistä pois pääsemisenä. Toteutetaan pieni sokkelo-ohjelma.
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
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
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)
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:
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! --