Tehtävä 2: (Aleksi Majander 19.10.2011) Jos ja kun jossain kohdassa on havaittu useita virheitä, on verotettu lisää tilanteen mukaan. luokkarakenne ja konstruktori 2pts: Luokassa on vaaditut 4 luokkamuuttujaa, konstruktori osaa varautua negatiiviseen syötteeseen -0.5pts pikkuvirhe (esim nollasyötteeseen varauduttu, mutta se ei toimi) -1.0pts suurempi virhe (luokkamuuttujia uupuu, negasyötteeseen ei varauduta, luokkamuuttujia ei osata käyttää jne.) lisaaVetta, LisaaMehua 2pts: Negatiiviseen syötteeseen varaudutaan. Metodi palauttaa 0 jos kaikki neste mahtuu säiliöön tai ylijäävän osan jos ei. -0.5pts pikkuvirheet (määrä palautetaan, muttei palaudu oikein, negatiivistä syötettä ei oteta huomioon) -1.0pts suuremmat virheet (Määrä palautetaan mielivaltaisesti, vettä ei lisätä mihinkään, tilavuuksia muutellaan jne.) teeMehua 2pts: Metodi palauttaa true vain jos mehua tehtiin, ja tekee mehua vain jos molempia aineita on jäljellä. -0.5pts pikkuvirhe (mehua ei ymmärretä tehdä kun saldona on tasan 0.18 ja 0.02) -1.0pts suuremmat virheet (ei palauta totuusarvoja oikein, ei tarkista määriä oikein, ei vähennä määriä oikein jne.) toString 1pts: -0.5pts (ei tulosteta tilavuuksia) Testiohjelma 3pts: Kolmen pisteen vastaukseen vaadittiin ohjelmaa jossa tulostuksen apuna käytettiin toimivasti niin lisaaVetta double arvoa, kuin teeMehua boolean arvoa, että normaalia esitystä. Tarkempaa esitystä koodissa. Arvosteluperusteena on 0.5 pts per testitapaus + 0.5pts per olion toimiva luonti + 0.5pts per olion oikea käyttö + 0.5pts per toString. Suppeita testitapauksia on saatettu pyöristää alaspäin. ===================================================================== public class Mehuautomaatti { // Tarvitaan muuttujat kummankin säiliön tilavuuksille ja niissä oleville nestemäärille. private double vesiSailioTilavuus; // arvo >=0 private double mehuSailioTilavuus; // arvo >=0 private double vesiMaara; // arvo >=0 ja <= vesiSailioTilavuus; private double mehuMaara; // arvo >=0 ja <= mehuSailioTilavuus // Alustetaan kaikki muuttujat, tarkistetaan ettei tilavuus saa negatiivista arvoa. public Mehuautomaatti(double vesiTilavuus, double mehuTilavuus) { this.vesiMaara = 0; this.mehuMaara = 0; this.vesiSailioTilavuus = vesiTilavuus; this.mehuSailioTilavuus = mehuTilavuus; if (this.vesiSailioTilavuus < 0) { this.vesiSailioTilavuus = 0; } if (this.mehuSailioTilavuus < 0) { this.mehuSailioTilavuus = 0; } } public double lisaaVetta(double maara) { // Negatiivinen lisäys, eipä mennä tätä pidemmälle; if (maara < 0) { return 0; } double ylijaama = (maara + vesiMaara) - vesiSailioTilavuus; // Jos kaikki mahtuu, ylijäämä on nolla if (ylijaama > 0){ // Tankki täyteen siis ja ylijäämä takaisin käyttäjälle vesiMaara = vesiSailioTilavuus; return ylijaama; } else { // jos kaikki mahtuu niin kaadetaan tankkii ja palautetaan nolla vesiMaara += maara; return 0; } } public double lisaaMehua(double maara) { // Negatiivinen lisäys, eipä mennä tätä pidemmälle; if (maara < 0) { return 0; } double ylijaama = (maara + mehuMaara) - mehuSailioTilavuus; // Jos kaikki neste ei mahdu, ylijäämä on positiivinen if (ylijaama > 0){ // Tankki täyteen siis ja ylijäämä takaisin käyttäjälle mehuMaara = mehuSailioTilavuus; return ylijaama; } else { // jos kaikki mahtuu niin kaadetaan tankkii ja palautetaan nolla mehuMaara += maara; return 0; } } public boolean valmistaMehuannos() { // tarkistetaan onko aineksia tarpeeksi, jossei niin false if ((mehuMaara < 0.02) || (vesiMaara < 0.18)) { return false; } else { // Aineksia on tarpeeksi, otetaan ainekset säiliöistä ja true mehuMaara -= 0.02; vesiMaara -= 0.18; return true; } } public String toString() { return "Vesisäiliö: " + vesiMaara + "/" + vesiSailioTilavuus + "\n" + "Mehusäiliö: " + mehuMaara + "/" + mehuSailioTilavuus; } // Seuraavassa on testattu kaikki mahdolliset käyttötapaukset, täysiin pisteisiin // riitti vähempikin testailu public static void main(String[] args) { // testataan konstruktori System.out.println("test1"); Mehuautomaatti testi = new Mehuautomaatti(1.0, 1.0); System.out.println(testi); // testataan konstruktorin toiminta negatiivisilla arvoilla System.out.println("test2"); testi = new Mehuautomaatti(1.0, -1.0); System.out.println(testi); // testataan setterit normaalitoiminnassa System.out.println("test3"); testi = new Mehuautomaatti(1.0, 1.0); System.out.println("Lisätään 0.5 mehua, yli jää " + testi.lisaaMehua(0.5)); System.out.println("Lisätään 0.5 vettä, yli jää " + testi.lisaaVetta(0.5)); System.out.println(testi); // testataan settereiden ylijäämän käsittely System.out.println("test4"); testi = new Mehuautomaatti(0.25, 0.25); System.out.println("Lisätään 0.5 mehua, yli jää " + testi.lisaaMehua(0.5)); System.out.println("Lisätään 0.5 vettä, yli jää " + testi.lisaaVetta(0.5)); System.out.println(testi); // testataan settereitä negatiivisellä syötteellä System.out.println("test5"); testi = new Mehuautomaatti(0.25, 0.25); System.out.println(testi); System.out.println("Lisätään -0.5 mehua, yli jää " + testi.lisaaMehua(-0.5)); System.out.println("Lisätään -0.5 vettä, yli jää " + testi.lisaaVetta(-0.5)); System.out.println(testi); // testataan mehun tekoa normitilanteessa System.out.println("test5"); testi = new Mehuautomaatti(0.18, 0.02); testi.lisaaMehua(0.5); testi.lisaaVetta(0.5); System.out.println(testi); // jos palauttaa true, niin ... System.out.println("test6"); if (testi.valmistaMehuannos()) { System.out.println("Saat mehua!"); } else { // jos palauttaa false .... System.out.println("Ei mehua sinulle!"); } System.out.println(testi); // testataan mehun tekoa tilanteessa jossa aineet eivät riitä System.out.println("test7"); testi = new Mehuautomaatti(0.17, 0.02); testi.lisaaMehua(0.5); testi.lisaaVetta(0.5); System.out.println(testi); // jos palauttaa true, niin ... if (testi.valmistaMehuannos()) { System.out.println("Saat mehua!"); } else { // jos palauttaa false .... System.out.println("Ei mehua sinulle!"); } System.out.println(testi); } }