-
Notifications
You must be signed in to change notification settings - Fork 2
Laskari 1
HUOM: viikon 1 laskarit pidetään poikkeuksellisesti salissa BK107
Ennen laskareita tee etukäteen tehtävät tehtävät
Allaolevat tehtävät tehdään paikanpäällä viikon 1 laskareissa. Tehtävien tekemisestä saa yhden kurssipisteen. Muista, että laskarit eivät ole paja, paikalle tulee saapua laskareiden aloitusaikana.
- tutustu JUnit-ohjeeseen
- lukiessasi tee testit myös itse
- lisää lopuksi lyyrakortille seuraavat testit:
- maukkaan lounaan syöminen ei vie saldoa negatiiviseksi, ota tähän mallia testistä syoEdullisestiEiVieSaldoaNegatiiviseksi
- negatiivisen summan lataaminen ei muuta kortin saldoa
- kortilla pystyy ostamaan edullisen lounaan kun kortilla rahaa vain edullisen lounaan verran (eli 2.5e)
- kortilla pystyy ostamaan maukkaan lounaan kun kortilla rahaa vain maukkaan lounaan verran (eli 4e)
HUOM1 on suositeltavaa, että yksi testi testaa vaan “yhtä asiaa” kerrallaan. Tee siis jokaisesta ylläolevasta oma testinsä.
HUOM2 on Kirjoita assertEquals-komennot aina siten, että ensimmäisenä parametrina on odotettu tulos ja toisena parametrina testatun metodin antama tulos.
Ohjelmoinnin perusteiden tehtävässä 78 (ks. tehtävänanto) ohjelmoitiin luokka YlhaaltaRajoitettuLaskuri:
public class YlhaaltaRajoitettuLaskuri {
private int arvo;
private int ylaraja;
public YlhaaltaRajoitettuLaskuri(int ylarajanAlkuarvo) {
this.ylaraja = ylarajanAlkuarvo;
this.arvo = 0;
}
public void seuraava() {
if (this.arvo == this.ylaraja) {
this.arvo = 0;
} else {
this.arvo++;
}
}
public int arvo() {
return this.arvo;
}
public void asetaArvo(int uusiArvo) {
if (uusiArvo < 0 || uusiArvo > this.ylaraja) {
return;
}
this.arvo = uusiArvo;
}
@Override
public String toString() {
String etunolla = "0";
if (this.arvo > 9) {
etunolla = "";
}
return etunolla + this.arvo;
}
}
Tee laskurille seuraavat testit:
- luodun laskurin alkuarvo on 0
- kun laskuri etenee kerran, sen arvo on 1
- kun laskuri etenee kaksi kertaa, sen arvo on 2
- jos laskurin yläraja on n ja laskuri etenee n kertaa, on laskurin arvo n
- korvaa testeissä n jollain konkreettisella arvolla, esim. 4
- jos laskurin yläraja on n ja laskuri etenee n+1 kertaa, on laskurin arvo 0
- jos laskurin yläraja on n ja laskuri etenee n+2 kertaa, on laskurin arvo 1
- metodi asetaArvo asettaa laskurin arvon oikein jos parametrin arvo on välillä 0 – laskurin yläraja
- metodi asetaArvo ei tee mitään jos parametrin arvo ei ole välillä 0 – laskurin yläraja
- toString tuottaa etunollan jos laskurin arvo on alle 10
- toString ei tuota etunollaa jos laskurin arvo on vähintään 10
HUOM on suositeltavaa, että yksi testi testaa vaan “yhtä asiaa” kerrallaan. Tee siis jokaisesta ylläolevasta oma testinsä.
- tutustu debuggeriohjeeseen
- lukiessasi ohjetta, kokeile kaikkia esimerkkejä koneellasi
Seuraavassa on ylhäältä rajoitetettujen laskureiden avulla muodostettu kello, joka käynnistyy ajassa 23:50:00:
public class Paaohjelma {
public static void main(String[] args) {
YlhaaltaRajoitettuLaskuri sekunnit = new YlhaaltaRajoitettuLaskuri(59);
YlhaaltaRajoitettuLaskuri minuutit = new YlhaaltaRajoitettuLaskuri(59);
YlhaaltaRajoitettuLaskuri tunnit = new YlhaaltaRajoitettuLaskuri(23);
tunnit.asetaArvo(23);
minuutit.asetaArvo(50);
int i = 0;
while (i < 602) {
System.out.println(tunnit + ":" + minuutit + ":" +sekunnit);
sekunnit.seuraava();
if (sekunnit.arvo() == 0) {
minuutit.seuraava();
if (minuutit.arvo()==0 ) {
tunnit.seuraava();
}
}
i++;
}
}
}
Seuraa debuggerin avulla kellon etenemistä, ensin aikaan 23:51:00 ja sitten vuorokauden vaihtumista aikaan 00:00:00. Askelia puoleen yöhön on niin monta, että etenemistä kannattaa nopeuttaa debuggeriohjeen kohdan “useita breakpointeja ja suorituksen jatkaminen” tyyliin.
Tee mahdollisimman kattavat testit Ohjelmoinnin perusteiden tehtävän 79 luokalle Lukutilasto
Lukutilaston koodi:
public class Lukutilasto {
// alla muutaman metodin runko valmiina
private int lukujenMaara;
private int summa;
public Lukutilasto() {
this.lukujenMaara = 0;
this.summa = 0;
}
public void lisaaLuku(int luku) {
this.lukujenMaara++;
this.summa += luku;
}
public int haeLukujenMaara() {
return this.lukujenMaara;
}
public int summa() {
return this.summa;
}
public double keskiarvo() {
if (this.lukujenMaara == 0) {
return 0;
}
return 1.0 * this.summa / this.lukujenMaara;
}
}
Huom: double-tyyppisiä lukuja vertaillessa tulee assertEquals-komennosta käyttää kolmeparametrista versiota:
public void testi() {
double tulos = testattavaMetodi();
double odotettu = 1,25;
assertEquals(odotettu, tulos, 0.001);
}
Kolmantena parametrina assertEquals-komentoon annetaan mittaustarkkuus. Syy tälle on doublella laskemisessa syntyvät pyöristysvirheet.