1   /**
2    * Luokka toteuttamaan sovitun julkisen rajapinnan
3    * @author  Vesa Lappalainen
4    * @version 1.0, 01.02.2003
5    */
6   public class AikaSekE implements AikaRajapinta {
7   
8     private AikaE hm = new AikaE();
9     private int s;
10  
11    /**
12     * Asettaa uuden ajan ja pitää huolen että aika on aina oikeaa muotoa.
13     * @param h asetettavat tunnit
14     * @param m asetettavat minuutit
15     * @param s asetettavat sekunnit
16     */
17    public void aseta(int h,int m, int s) {
18      hm.aseta(h,m); this.s = s; lisaa(0,0);
19    }
20  
21    public void aseta(int h,int m) { aseta(h,m,0); }
22    public void aseta(int h)       { aseta(h,0);   }
23  
24    public AikaSekE()              { aseta(0,0,0); }
25  
26    /**
27     * Alustaa ajan
28     * @param h tunnit
29     * @param m minuutit
30     * @param s sekunnit
31     */
32    public AikaSekE(int h,int m, int s) { // Muodostaja
33      aseta(h,m,s);
34    }
35  
36    public AikaSekE(int h,int m) { aseta(h,m,0); }
37    public AikaSekE(int h)       { aseta(h,0,0); }
38  
39    /**
40     * Tulostaa ajan muodossa 15:05
41     * @param lf tulostetaanko rivinvaihto vai ei
42     */
43    public void tulosta(boolean lf) {
44      hm.tulosta(false);
45      System.out.print(":" + (s<10?"0":"")+s);
46      if ( lf ) System.out.println();
47    }
48  
49    /**
50     * Tulostaa ajan muodossa 15:05 sekä aina rivinvaihdon
51     */
52    public void tulosta() {
53      tulosta(true);
54    }
55  
56    /**
57     * Lisää aikaan valitun minuuttimäärän
58     * @param lisa_min lisättävä minuuttimäärä
59     * @param lisa_sek lisättävä sekunttimäärä
60     */
61    public void lisaa(int lisa_min,int lisa_sek)  {
62      s += lisa_sek;
63      hm.lisaa(lisa_min+s/60);
64      s %= 60;
65    }
66  
67    public void lisaa(int lisa_min)  { lisaa(lisa_min,0); }
68  
69    public int getH() { return hm.getH(); }
70    public int getM() { return hm.getM(); }
71  
72    public static void main(String[] args) {
73      AikaE a1 = new AikaE();
74      AikaE a2 = new AikaE(13);
75      AikaE a3 = new AikaE(14,175);
76  
77      a1.tulosta();  a2.tulosta();  a3.tulosta();
78      a1.aseta(12,15); a2.aseta(16,-15);
79      a1.tulosta(); a2.tulosta();
80  
81      AikaSekE a4 = new AikaSekE(14,55,45); a4.tulosta();
82      a4.lisaa(3,30); a4.tulosta();
83  
84      // Rajapintaan perustuva esimerkki polymorfisesta taulukosta
85      AikaRajapinta ajat[] = new AikaRajapinta[5];
86      ajat[0] = a1; ajat[1] = a2; ajat[2] = a3; ajat[3] = a4;
87      ajat[4] = new AikaSekE(23,59,59);
88  
89      for (int i=0; i < ajat.length; i++ ) {
90        ajat[i].tulosta(false); System.out.print(" +" + i + " => ");
91        ajat[i].lisaa(i); ajat[i].tulosta();
92      }
93  
94    }
95  
96  }
97  
98