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