Tehtävä 2, Jukka Manner Pist. 12 ******* 7 11 ******* 7 10 ****** 6 9 **** 4 8 - 0 7 ** 2 6 ** 2 5 - 0 4 - 0 3 - 0 2 ** 2 1 *** 3 0 * 1 Esimerkkivastaukset lopussa. Arvosteluperiaatteet: 2. Tehtävä Koska jokainen vastaus oli hieman erilainen, ja erikoisiakin,mutta toimivia ratkaisuja oli paljon, tarkkoja korjausperiaatteita ei voi antaa. Kaikissa vastauksissa lähdettiin siitä, että vastaus on aluksi täysien pisteiden arvoinen. Virheet sitten vähensivät tuota maksimisaldoa virheen vakavuuden mukaan, pienistä syntaksivirheistä ei kuitenkin sakotettu. Joitakin oleellisia asioita tehtävistä: a) Huomioitavaa: - Private muuttujat luokan muuttujien määreinä - Ratikan ovi sai olla auki tai kiinni ajettaessa (niinhän HKL:n kuskeillakin toisinaan on... :-) ) - Kiskojarru piti olla poissa, jotta vauhtia pystyi muuttamaan - Jarrutus on erilaista, jos ajetaan eteenpäin (nopeus > 0) tai peruutetaan (nopeus < 0) (tosin riippuu toteutuksesta!) - Nopeudella oli rajat - Stringejä ei vertailla "=="-operaatiolla, vaan compareTo-metodilla - Metodien tulisi saada tarvittavat arvonsa parametreinä eikä lukea niitä itse b) Huomioitavaa: - Silmukka (do - while?), jossa pyöritään lopetuskäskyyn asti - Kaikenlaisia versioita hyväksyttiin, kunhan ne pyörivät silmukassa public class Ratikka { // "Salaisia" private double nopeus; private boolean kiskoJarru, ovetKiinni; public Ratikka() { this.nopeus=0.0; this.kiskoJarru=true; this.ovetKiinni=false; } public boolean vauhti(int vauhti) { // Eihän jarru ole päällä ja nopeus on sallittu...? if((!kiskoJarru) && (vauhti >= -10)&& ( vauhti <=60) ) { this.nopeus = vauhti; return true; } return false; } public void kiskojarru() { // Vaihdetaan vain muuttajan arvo toiseksi... :-) this.kiskoJarru = !this.kiskoJarru; if(this.kiskoJarru) // Tätä tarkistus ei välttämättä tarvita this.nopeus=0.0; // Koska nopeus on aina 0, kun jarrua } // käsitellään... public void ovipainike() { // Vaihdetaan vain muuttajan arvo toiseksi... :-) this.ovetKiinni = !this.ovetKiinni; } public boolean ilmajarru(int prosentti) { // Onhan prosentti fiksu ja nopeus 0, ei tehdä turhaa työtä... if((prosentti > 0) && (prosentti <= 100) && (nopeus !=0.0) ) { this.nopeus = ( 1 - (prosentti/100.0) ) * this.nopeus; return true; } return false; } public String toString() { String palaute=""; palaute ="(nopeus: "+this.nopeus+" km/t, kiskojarru: "; if(kiskoJarru) palaute +="päällä, ovet: "; else palaute +="pois, ovet: "; if(ovetKiinni) return palaute+" kiinni)"; else return palaute+" auki)"; } } public class RatikkaTesti { public static void main(String args[]) { Ratikka spora = new Ratikka(); int vastaus, arvo; System.out.println("Tervetuloa ajamaan ratikkaa!"); do { // Tulostetaan ohje: ohje(); // Luetaan käyttäjän komento, Lue-luokka tekee // osan // tarkistuksista meidän puolesta vastaus = Lue.kluku(); switch(vastaus) { case 1: spora.kiskojarru(); break; case 2: spora.ovipainike(); break; case 3: System.out.print( "Anna uusi vauhti:"); arvo = Lue.kluku(); spora.vauhti(arvo); System.out.println(); break; case 4: System.out.print( "Anna jarrusvoima:"); arvo = Lue.kluku(); spora.ilmajarru(arvo); System.out.println(); break; case 5: // Tämä pitää olla, jotta numero // 5 ei anna // virheilmoitusta break; default: System.out.println( "Tuollaista komentoa ei ole..."); break; } System.out.println("Ratikan tila:\t"+spora); }while(vastaus != 5); } private static void ohje() { System.out.print("Ratikan ohjausvalikko:\n"+ "<1> Vaihda kiskojarrun asentoa\n"+ "<2> Ovikytkin\n"+ "<3> Aseta vauhti (-10 .. 60)\n"+ "<4> Jarruta (0 -> 100 %)\n"+ "<5> Lopeta ajelu\n"+ "\nAnna komento: "); } }