1   /**
2    *  Luokka ja ohjelma yksinkertaisessa muodossa.
3    *  Katso kehitys: Astia.java ja Astia2.java
4    *<br>
5    *  Pelillä demonstroidaan/harjoitellaan miten voidaan kahdella astialla,
6    *  5 l ja 8 l,  muodostaa kaikki mahdolliset tilavuudet 1-13 l.
7    *  Pelissä on kaksi varsinaista astiaa: a5 ja a8, sekä kolmas apuastia
8    *  ampari.  Nestettä voidaan kerrallaan kaataa yhdestä astiasta toiseen
9    *  joko siten, että astian koko sisältö tyhjennetään jos se mahtuu
10   *  tai astista kaadetaan sen verran että toinen astia tulee täyteen.
11   *
12   * @author  Vesa Lappalainen
13   * @version 1.0, 09.02.2003
14   */
15  public class Astia1 {
16    private double tilavuus;
17    private double maara;
18  
19    /**
20     * Alustaa uuden astian tietyn kokoiseksi ja luonnollisetsi tyhjäksi
21     * @param tilavuus uuden astian tilavuus
22     */
23    public Astia1(double tilavuus) { this.tilavuus = tilavuus; this.maara = 0; }
24  
25    /**
26     * Täyttää astian piripintaan asti
27     */
28    public void tayta() { maara = tilavuus; }
29  
30    /**
31     * Kaataa tästä astiasta (this) toiseen astiaan niin paljon kuin toiseen
32     * mahtuu tai tästä astiasta on antaa.
33     * @param astia astia johon kaadetaan
34     */
35    public void kaada(Astia1 astia) {
36      double siirrettava = astia.tilavuus - astia.maara;
37      if ( maara < siirrettava ) siirrettava = maara;
38      astia.maara += siirrettava;
39      maara -= siirrettava;
40    }
41  
42    public double getMaara() { return maara; }
43  
44    public static void main(String[] args) {
45      Astia1 astia5l = new Astia1(5);
46      Astia1 astia8l = new Astia1(8);
47      Astia1 ampari  = new Astia1(100);
48  
49      ampari.tayta();
50  
51      ampari.kaada(astia8l);
52      astia8l.kaada(astia5l);
53  
54      System.out.println("8 litran astiassa on " + astia8l.getMaara() +
55                         " litraa nestettä");
56    }
57  
58  }
59  
60