-
Notifications
You must be signed in to change notification settings - Fork 1
laskari 1
Tarkoitus on että osallistut johonkin viikon laskaritilaisuuksista ke 9.30-12, ke 14-17, to 9.30-12, to 14-17 tai pe 9.30-12
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)
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-1 kertaa, on laskurin arvo n-1
- korvaa testeissä n jollain konkreettisella arvolla, esim. 4
- jos laskurin yläraja on n ja laskuri etenee n kertaa, on laskurin arvo 0
- jos laskurin yläraja on n ja laskuri etenee n+1 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;
}
}