/** * John McLane (Bruce Willis) joutui elokuvassa Die Hard 3 ongelman eteen, * jossa piti kahdella vesikanisterilla mitata jonkin muun suuruinen * vesimäärä "tarkasti" ja näin estää pommin räjähtäminen. * Koska aika meni varsin tiukalle, on vastaavien tilanteiden harjoittelemiseksi * nyt tehty uusi menestysohjelma "Astia". *
* Pelillä demonstroidaan/harjoitellaan miten voidaan kahdella astialla, * 5 l ja 8 l, muodostaa kaikki mahdolliset tilavuudet 1-13 l. * Pelissä on kaksi varsinaista astiaa: a5 ja a8, sekä kolmas apuastia * ampari. Nestettä voidaan kerrallaan kaataa yhdestä astiasta toiseen * joko siten, että astian koko sisältö tyhjennetään jos se mahtuu * tai astista kaadetaan sen verran että toinen astia tulee täyteen. *
* Tee ohjelma jota voitasiin käyttää seuraavasti: *
*
 *  Käytössäsi on 8 ja 5 litran astia ja Ämpäri (100 l)
 *
 *  8 litran astiassa on 0 litraa
 *  5 litran astiassa on 0 litraa
 *  Mistä kaadetaan ja mihin >ä 8[ret]
 *  8 litran astiassa on 8 litraa
 *  5 litran astiassa on 0 litraa
 *  Mistä kaadetaan ja mihin >8 5[ret]
 *  8 litran astiassa on 3 litraa
 *  5 litran astiassa on 5 litraa
 *  Mistä kaadetaan ja mihin >5 ä[ret]
 *  8 litran astiassa on 3 litraa
 *  5 litran astiassa on 0 litraa
 *  Mistä kaadetaan ja mihin >8 5[ret]
 *  8 litran astiassa on 0 litraa
 *  5 litran astiassa on 3 litraa
 *  Mistä kaadetaan ja mihin >[ret]
 *
* @author Vesa Lappalainen * @version 1.0, 09.02.2003 */ public class Astia { private String nimi; private double tilavuus; private double maara; /** * Alustaa uuden astian tietyn kokoiseksi ja luonnollisetsi tyhjäksi * @param nimi uuden astian nimi * @param tilavuus uuden astian tilavuus */ public Astia(String nimi, double tilavuus) { this.nimi = nimi; this.tilavuus = tilavuus; this.maara = 0; } /** * Täyttää astian piripintaan asti */ public void tayta() { maara = tilavuus; } /** * kaataa astiaan joko lisää tai vähentää, yli ei saa mennä eikä * pakkasen puolelle * @param lisa astiaan laitettava tai otettava nestemäärä */ public void kaada(double lisa) { if ( lisa < 0 ) { if ( -lisa > maara ) maara = 0; else maara += lisa; } else if ( getTyhjaa() > lisa ) maara += lisa; else tayta(); } /** * Kaataa tästä astiasta (this) toiseen astiaan niin paljon kuin toiseen * mahtuu tai tästä astiasta on antaa. * @param astia astia johon kaadetaan */ public void kaada(Astia astia) { double siirrettava = astia.getTyhjaa(); if ( getMaara() < siirrettava ) siirrettava = getMaara(); astia.kaada(siirrettava); kaada(-siirrettava); } public double getMaara() { return maara; } public double getTilavuus() { return tilavuus; } public double getTyhjaa() { return getTilavuus()-getMaara(); } public String getNimi() { return nimi; } public boolean oletko(String mika) { return getNimi().equalsIgnoreCase(mika);} public static void main(String[] args) { Astia astiat[] = { new Astia("ä",100), new Astia("5",5), new Astia("8",8) }; Astia ampari = astiat[0]; ampari.tayta(); ampari.kaada(astiat[2]); astiat[2].kaada(astiat[1]); System.out.println("8 litran astiassa on " + astiat[2].getMaara() + " litraa nestettä"); // for (int i=0; i... ) // if ( astiat[i].oletko(nimi) ) } }