Astia.java |
1 /** 2 * John McLane (Bruce Willis) joutui elokuvassa Die Hard 3 ongelman eteen, 3 * jossa piti kahdella vesikanisterilla mitata jonkin muun suuruinen 4 * vesimäärä "tarkasti" ja näin estää pommin räjähtäminen. 5 * Koska aika meni varsin tiukalle, on vastaavien tilanteiden harjoittelemiseksi 6 * nyt tehty uusi menestysohjelma "Astia". 7 *<br> 8 * Pelillä demonstroidaan/harjoitellaan miten voidaan kahdella astialla, 9 * 5 l ja 8 l, muodostaa kaikki mahdolliset tilavuudet 1-13 l. 10 * Pelissä on kaksi varsinaista astiaa: a5 ja a8, sekä kolmas apuastia 11 * ampari. Nestettä voidaan kerrallaan kaataa yhdestä astiasta toiseen 12 * joko siten, että astian koko sisältö tyhjennetään jos se mahtuu 13 * tai astista kaadetaan sen verran että toinen astia tulee täyteen. 14 *<br> 15 * Tee ohjelma jota voitasiin käyttää seuraavasti: 16 *<br> 17 *<pre> 18 * Käytössäsi on 8 ja 5 litran astia ja Ämpäri (100 l) 19 * 20 * 8 litran astiassa on 0 litraa 21 * 5 litran astiassa on 0 litraa 22 * Mistä kaadetaan ja mihin >ä 8[ret] 23 * 8 litran astiassa on 8 litraa 24 * 5 litran astiassa on 0 litraa 25 * Mistä kaadetaan ja mihin >8 5[ret] 26 * 8 litran astiassa on 3 litraa 27 * 5 litran astiassa on 5 litraa 28 * Mistä kaadetaan ja mihin >5 ä[ret] 29 * 8 litran astiassa on 3 litraa 30 * 5 litran astiassa on 0 litraa 31 * Mistä kaadetaan ja mihin >8 5[ret] 32 * 8 litran astiassa on 0 litraa 33 * 5 litran astiassa on 3 litraa 34 * Mistä kaadetaan ja mihin >[ret] 35 *</pre> 36 * @author Vesa Lappalainen 37 * @version 1.0, 09.02.2003 38 */ 39 public class Astia { 40 private String nimi; 41 private double tilavuus; 42 private double maara; 43 44 /** 45 * Alustaa uuden astian tietyn kokoiseksi ja luonnollisetsi tyhjäksi 46 * @param nimi uuden astian nimi 47 * @param tilavuus uuden astian tilavuus 48 */ 49 public Astia(String nimi, double tilavuus) { 50 this.nimi = nimi; 51 this.tilavuus = tilavuus; this.maara = 0; 52 } 53 54 /** 55 * Täyttää astian piripintaan asti 56 */ 57 public void tayta() { maara = tilavuus; } 58 59 60 /** 61 * kaataa astiaan joko lisää tai vähentää, yli ei saa mennä eikä 62 * pakkasen puolelle 63 * @param lisa astiaan laitettava tai otettava nestemäärä 64 */ 65 public void kaada(double lisa) { 66 if ( lisa < 0 ) { 67 if ( -lisa > maara ) maara = 0; 68 else maara += lisa; 69 } 70 else 71 if ( getTyhjaa() > lisa ) maara += lisa; 72 else tayta(); 73 } 74 75 /** 76 * Kaataa tästä astiasta (this) toiseen astiaan niin paljon kuin toiseen 77 * mahtuu tai tästä astiasta on antaa. 78 * @param astia astia johon kaadetaan 79 */ 80 public void kaada(Astia astia) { 81 double siirrettava = astia.getTyhjaa(); 82 if ( getMaara() < siirrettava ) siirrettava = getMaara(); 83 astia.kaada(siirrettava); 84 kaada(-siirrettava); 85 } 86 87 public double getMaara() { return maara; } 88 public double getTilavuus() { return tilavuus; } 89 public double getTyhjaa() { return getTilavuus()-getMaara(); } 90 public String getNimi() { return nimi; } 91 public boolean oletko(String mika) { return getNimi().equalsIgnoreCase(mika);} 92 93 public static void main(String[] args) { 94 Astia astiat[] = { new Astia("ä",100), new Astia("5",5), new Astia("8",8) }; 95 Astia ampari = astiat[0]; 96 97 ampari.tayta(); 98 99 ampari.kaada(astiat[2]); 100 astiat[2].kaada(astiat[1]); 101 102 System.out.println("8 litran astiassa on " + astiat[2].getMaara() + 103 " litraa nestettä"); 104 // for (int i=0; i... ) 105 // if ( astiat[i].oletko(nimi) ) 106 } 107 108 } 109 110
Astia.java |