Pakolliset tehtävät on merkitty harmalla taustavärillä.
HUOM: nimeä tiedostot otsikossa olevan sanan mukaan
Tämän viikon luentomateriaalissa on kappale lähdekoodin sisentämisestä. Lue se, ja sisennä seuraava lähdekoodi oikein. Korjaa myös ohjelmassa oleva virhe.
public class Laskin { public static void main(String[] komentoriviParametrit) { int i = 0; Laskuri omaLaskuri = new Laskuri(0); System.out.println("omaLaskurin arvo on " + omaLaskuri.annaArvo()); omaLaskuri.kasvataArvoa();omaLaskuri.kasvataArvoa(); omaLaskuri.kasvataArvoa();omaLaskuri.kasvataArvoa(); omaLaskuri.kasvataArvoa(); omaLaskuri.kasvataArvoa(); if (i == 0 ); { System.out.println("i on 0"); System.out.println("ja pysyy"); } else { System.out.println("i oli jotain muuta"); i=0; System.out.println("mutta nyt se on 0"); } int arvo = omaLaskuri.annaArvo(); System.out.println("omaLaskurin arvo on " + arvo); } }
Toteuta luentomateriaalissa olevaan Laskuri
-luokkaan tarvittava toiminnallisuus jotta seuraava ohjelma toimisi oikein. Varmista ohjelman toimivuus!
public class KahviJaTee { public static void main(String[] komentoriviParametrit) { Laskuri kahvitMattiL = new Laskuri(2); Laskuri teeMattiL = new Laskuri(4); System.out.println("Matti L. on juonut " + kahvitMattiL.annaArvo() + " kahvia."); System.out.println("Matti L. on juonut " + teeMattiL.annaArvo() + " teetä."); System.out.println("Juodaan kahvia."); kahvitMattiL.kasvataArvoa(); kahvitMattiL.kasvataArvoa(); System.out.println("Maksetaan pois velkoja."); kahvitMattiL.vahennaArvoa(); teeMattiL.vahennaArvoa(); System.out.println("Matti L. on juonut " + kahvitMattiL.annaArvo() + " kahvia."); System.out.println("Matti L. on juonut " + teeMattiL.annaArvo() + " teetä."); } }
Tee ohjelma moottori, joka käyttää Laskuri
-luokkaa. Tee ohjelmassa olio moottori
, jonka alkuarvo on 0
. Tämän jälkeen kasvata laskurin kasvataArvoa()
-metodilla moottorin kierrosluku arvoon 4200
ja tulosta tilanne. Tämän jälkeen vähennä kierroksia vahennaArvoa()
-metodilla siten, että kierroksia on 3200
. Lopuksi vähennä kierrokset arvoon 0
.
Lisäksi tee toString()
-metodi, joka palauttaa muotoillun tekstin.
Moottorin kierrosluku on nyt 0 Moottorin kierrosluku on nyt 4200 Moottorin kierrosluku on nyt 3200 Moottorin kierrosluku on nyt 0
Laajenna Laskuria siten, että luokan konstruktori ottaa parametrikseen myös maksimiarvon.
Toteuta kasvataMaksimiin()
-metodi, joka asettaa moottorin kierrosluvun maksimiarvoonsa.
Tee kasvataArvoa()
-metodiin tarkastus, että arvo ei asetu maksimiarvon yli. Testaa seuraavasti:
moottori.asetaMaksimiin(); System.out.println(moottori) // tulostaa 4200 (tai muun maksimiarvon) moottori.kasvataArvoa(); System.out.println(moottori) // tulostaa saman kuin edellinen, eli arvo ei ole muuttunut.
Tee ohjelma käyttäen materiaalin pohjana materiaalin kuulaskurin oliototeutusta. Muokkaa toteutusta siten, että ohjelma pitää kirjaa myös vuodesta.
Anna vuosi: 2010 Anna kuukausi: 8 Seuraavat 24 kuukautta: 2010 - 9 2010 - 10 2010 - 11 2010 - 12 2011 - 1 2011 - 2 2011 - 3 2011 - 4 2011 - 5 2011 - 6 2011 - 7 2011 - 8 2011 - 9 2011 - 10 2011 - 11 2011 - 12 2012 - 1 2012 - 2 2012 - 3 2012 - 4 2012 - 5 2012 - 6 2012 - 7 2012 - 8 2012 - 9 2012 - 10 2012 - 11 2012 - 12 2013 - 1 2013 - 2 2013 - 3 2013 - 4 2013 - 5
Toteuta nelilaskin olioversiona. Tee uusi projekti, johon laitat alla olevan pääohjelman. Toteuta samaan projektiin luokka NeliLaskin
.
import java.util.Scanner; public class NeliLaskija { public static Scanner lukija = new Scanner(System.in); public static void main(String[] komentoriviParametrit) { NeliLaskin laskin = new NeliLaskin(); System.out.print("Anna ensimmäinen luku: "); int eka = lukija.nextInt(); System.out.print("Anna toinen luku: "); int toka = lukija.nextInt(); System.out.println("Summa: " + laskin.summa(eka, toka)); System.out.println("Erotus: " + laskin.erotus(eka, toka)); System.out.println("Jako: " + laskin.jako(eka, toka)); System.out.println("Kerto: " + laskin.kerto(eka, toka)); } }
Tee kuten edellisessäkin tehtävässä, mutta nyt käyttäen olion sisäisiä attribuutteja (kaksi kokonaislukua). Tässä versiossa laskin siis tietää kaksi lukuaan, joille se osaa suorittaa operaatioita. Mieti kahden eri toteutustavan (NeliLaskija ja NeliLaskija2) eroja.
import java.util.Scanner; public class NeliLaskija { public static Scanner lukija = new Scanner(System.in); public static void main(String[] komentoriviParametrit) { System.out.print("Anna ensimmäinen luku: "); int eka = lukija.nextInt(); System.out.print("Anna toinen luku: "); int toka = lukija.nextInt(); NeliLaskin laskin = new NeliLaskin(eka,toka); System.out.println("Summa: " + laskin.summa()); System.out.println("Erotus: " + laskin.erotus()); System.out.println("Jako: " + laskin.jako()); System.out.println("Kerto: " + laskin.kerto()); } }
Tee ohjelma, jolla voi laskea opintopisteiden laskennallisen työmäärän. 1 opintopiste on 27 tuntia.
Toteuta TyomaaraMuunnin
luokka, josta teet oliot esimerkin mukaisesti. Oliolla tulee olla toString()
-metodi, joka palauttaa valmiiksi muotoillun tekstin.
import java.util.Scanner; public class OpintopisteetTunneiksi { public static Scanner lukija = new Scanner(System.in); public static void main(String[] komentoriviParametrit) { TyomaaraMuunnin ohpe = new TyomaaraMuunnin("Ohjelmoinnin perusteet", 5.0, 6); TyomaaraMuunnin ohja = new TyomaaraMuunnin("Ohjelmoinnin jatkokurssi", 4.0, 6); System.out.println(ohpe); System.out.println("---"); System.out.println(ohja); } }
Kurssin Ohjelmoinnin perusteet (5.0op) laskennallinen työmäärä Yhteensä 135.0h Viikossa 22.5h --- Kurssin Ohjelmoinnin jatkokurssi (4.0op) laskennallinen työmäärä Yhteensä 108.0h Viikossa 18.0h
Tee luokkaa käyttäen ohjelma, joka kysyy kurssin nimeä, opintopisteitä ja työmäärää. Tämän jälkeen ohjelma tulostaa olion tiedot kuten edellisessä tehtävässä.
Kurssin nimi: Agile Entwicklung mit Ruby über Gleis Opintopisteitä: 5.0 Kesto viikkoina: 6 Kurssin Agile Entwicklung mit Ruby über Gleis (5.5op) laskennallinen työmäärä Yhteensä 148.5h Viikossa 24.75h
Toteuta materiaalin luokan Varasto
avulla ohjelma, joka pitää kirjaa jäljellä olevan kahvin määrästä.
Älä muuta luokan Varasto
valmiina olevia metodeja, mutta voit lisätä omia metodeja entisten rinnalle. Varaston tilan muuttamisen tulee kuitenkin tapahtua valmiiden otaVarastosta()
ja lisaaVarastoon()
-metodien avulla.
Hoida tilan tulostaminen toString()
-metodin avulla.
Aloita ohjelman tekeminen tämän avulla:
import java.util.Scanner; public class KahvikassaVarasto { public static Scanner lukija = new Scanner(System.in); public static void main(String[] args) { Varasto kahvi = new Varasto(3, 2); System.out.println("Kahvikassa"); System.out.println("1\tJuo kahvi"); System.out.println("0\tPoistu\n"); } }
Ohjelman suoritus näyttää seuraavalta:
Kahvikassa 1 Juo kahvi 0 Poistu Kahvia on jäljellä 2.0/3.0 kuppia Valitse toiminto: 1 Kahvia on jäljellä 1.0/3.0 kuppia Valitse toiminto: 1 Kahvia on jäljellä 0.0/3.0 kuppia Valitse toiminto: 1 Kahvi on loppu! Kahvia on jäljellä 0.0/3.0 kuppia Valitse toiminto: 0
Laajenna toteutusta siten, että ohjelmaan tulee uusi toiminto: kahvin keittäminen. Kahvin keittäminen on mahdollista kaikissa ohjelman vaiheissa, mutta kahvia ei voi keittää enempää kuin tilaa on jäljellä.
Kahvikassa 1 Juo kahvi 2 Keitä kahvia 0 Poistu Kahvia on jäljellä 2.0/3.0 kuppia Valitse toiminto: 2 Kuinka monta kuppia keitetään: 2 Ei ole tilaa! Kahvia on jäljellä 2.0/3.0 kuppia Valitse toiminto: 2 Kuinka monta kuppia keitetään: 1 Kahvia on jäljellä 3.0/3.0 kuppia Valitse toiminto: 0
Tehdään arvaajapeli, jossa tietokone yrittää arvata annatko syötteeksi 0 vai 1 edellisten arvaustesi perusteella.
Luokka Arvaaja
pitää yllä arvausten määrää, ja yrittää arvata seuraavan luvun. Arvaajalla on metodit syotaArvaus
, jolle annetaan parametriksi pelaajan viimeksi arvaama luku. Metodi annaArvaus
palauttaa arvaajan arvaaman luvun. Voit käyttää alla olevaa runkoa arvaajan toteutukseen.
public class Arvaaja { // .. public Arvaaja() { // .. } public void syotaArvaus(int luku) { // .. } public int annaArvaus() { // .. } }
Tee toteutuksesta sellainen, mikä pitää kirjaa arvattujen nollien ja ykkösten määristä. Jos nollia on enemmän kuin ykkösiä, arvataan aina nolla. Muulloin arvataan aina yksi.
Itse pääohjelma sijaitsee luokassa ArvaajaPeli
. ArvaajaPeli lukee käyttäjältä syötteitä numero kerrallaan. Kun käyttäjä syöttää luvun, arvaajalta kysytään lukua. Jos luku on sama, saa tietokone pisteen, muutoin käyttäjä saa pisteen. Pelin loputtua tulostetaan pelitulos.
Voit käyttää seuraavaa runkoa ohjelman alkuun. Tarvitset ohjelmaan toiston lukemiseen.
import java.util.Scanner; public class ArvaajaPeli { public static Scanner lukija = new Scanner(System.in); public static void main(String[] komentoriviParametrit) { Arvaaja arvaaja = new Arvaaja(); int tietokoneenPisteet = 0; int pelaajanPisteet = 0; int pelaajanSyote; int arvaajanArvaus; System.out.println("--Arvaaja--"); System.out.println("1\tKone arvaa yksi."); System.out.println("0\tKone arvaa nolla.\n"); System.out.println("Muut luvut lopettavat\n"); pelaajanSyote = lukija.nextInt(); // toista kunnes? arvaajanArvaus = arvaaja.annaArvaus(); arvaaja.syotaArvaus(pelaajanSyote); if(pelaajanSyote == arvaajanArvaus) tietokoneenPisteet = tietokoneenPisteet + 1; else pelaajanPisteet = pelaajanPisteet + 1; // tulosta pistetilanne pelaajanSyote = lukija.nextInt(); // kun toisto loppuu, tulosta lopputilanne } }
Ohjelman tulostus voi olla esimerkiksi seuraavanlaista:
--Arvaaja-- 1 Kone arvaa yksi. 0 Kone arvaa nolla. Muut luvut lopettavat. Syöte: 0 Kone arvasi: 1 Tilanne: Pelaaja 1, Kone 0 Syöte: 0 Kone arvasi: 0 Tilanne: Pelaaja 1, Kone 1 Arvaus: 1 Kone arvasi: 0 Tilanne: Pelaaja 2, Kone 1 Arvaus: 42 Kiitos pelistä! Lopputilanne: Pelaaja 2, Kone 1