Arvosteluperusteet, tehtävä 3. Pistejako: Kahviautomattioilioden luominen ja käyttö: 8p (4+4) Kahviautomaatit tuli luoda ja niitä käyttää 1. tehtävän tehtävanannossa määritellyn rajapinnan kautta. Metodien argumenttien järkevyystarkistukset sai jättää kahviautomattiolioden tehtäväksi. Lisättäviä vesi- ja purumääriä ei välttämättä tarvinnut kysyä käyttäjältä: järkevät vakioarvotkin kelpasivat. Muut tehtävän osat (lähinnä komentotulkki): 7p Komentotulkkia tuli suorittaa niin kaun kunnes kahvilan sulkemiskäsky (7) annettiin. Laittomien arvojen ei pitäisi lopettaa komentotulkkia (tämän sai anteeksi jos oli dokumentoinnut ratkaisunsa). Eräitä yleisiä virheitä ja niistä seuraavia vähennyksiä: * kahviautomaattioliot määritelty kahvila-olion ilmentymämuuttujiksi, mutta niitä käsitelllään kuin ne olisivat olleet main-metodin muuttujia 3p * kahviautomaattioliot luodaan konstruktorilla, jota ei ole (esim. konstruktorilla, jolla ei ole argumentteja) 2p * konstruktorin argumenttina merkkijono, mutta ilman lainausmerkkejä 1p * main-metodi puuttuu 3p * toisto puuttuu 3p * toistoehdossa vikaa 1-2p * kahvinvalmistuksen onnistumista ei tarkisteta 1p * sijoitus ja vertailu sekoitettu toisiinsa 1p * komennon lukemisessa käyttäjältä vikaa 1-2p ------------------------------------------------------------------- //Tehtävän 3 malliratkaisu public class Kahvila { public static void main(String [] args) { //luodaan automaatit Kahviautomaatti ranskalainen=new Kahviautomaatti("ranskalainen"); Kahviautomaatti italialainen=new Kahviautomaatti("italialainen"); char syöte; System.out.println("Tervetuloa kahvilaan!"); //komentotulkki do { System.out.println(ranskalainen); System.out.println(italialainen); System.out.println(); tulostaValikko(); syöte=Lue.merkki(); if (syöte=='1'){ System.out.println("Paljonko vettä lisätään?"); ranskalainen.lisääVettä(Lue.dluku()); } if (syöte=='2'){ System.out.println("Paljonko puruja lisätään?"); ranskalainen.lisääPuruja(Lue.kluku()); } if (syöte=='3') { if (ranskalainen.valmistaAnnos()) System.out.println("\nKupillinen ranskalaista kahvia, ole hyvä.\n"); else { System.out.println("\nKahvin valmistus epäonnistui."); if (ranskalainen.paljonkoVettä()<0.02) System.out.println( "Lisää vettä ranskalaiseen automaattiin."); if (ranskalainen.paljonkoPuruja()<1) System.out.println( "Lisää puruja ranskalaiseen automaattiin."); System.out.println(); } } if (syöte=='4'){ System.out.println("Paljonko vettä lisätään?"); italialainen.lisääVettä(Lue.dluku()); } if (syöte=='5'){ System.out.println("Paljonko puruja lisätään?"); italialainen.lisääPuruja(Lue.kluku()); } if (syöte=='6') { if (italialainen.valmistaAnnos()) System.out.println("\nKupillinen italialaista kahvia, ole hyvä.\n"); else { System.out.println("\nKahvin valmistus epäonnistui."); if (italialainen.paljonkoVettä()<0.02) System.out.println( "Lisää vettä italialaiseen automaattiin."); if (italialainen.paljonkoPuruja()<1) System.out.println( "Lisää puruja italialaiseen automaattiin."); System.out.println(); } } if (syöte < '1' || syöte > '7') System.out.println("\nTuntematon komento yritä uudestaan.\n"); } while (syöte !='7'); System.out.println("Kahvila suljettu. Näkemiin!"); } private static void tulostaValikko() { System.out.println("Valitse komento:"); System.out.println("1 täydennetään ranskalaisen kahvin vesisäiliötä"); System.out.println( "2 täydennetään ranskalaisen kahvin kahvinpurusäiliötä"); System.out.println("3 valmistetaan annos ranskalaista kahvia"); System.out.println("4 täydennetään italialaisen kahvin vesisäiliötä"); System.out.println( "5 täydennetään italialaisen kahvin kahvinpurusäiliötä"); System.out.println("6 valmistetetaan annos italialaista kahvia"); System.out.println("7 suljetaan kahvila"); } }