edutecnica

Esercizio 5        

Scrivi una classe T che contenga un orario valido. Deve essere possibile impostare un orario in ore,minuti,secondi; la classe deve prevedere un metodo per la validazione di un orario, un metodo per aggiungere un orario ad un altro e un metodo per sottrarre due orari .



class progT {
public static void main (String[] args) {
     T t1,t2;
     t1=new T();
     t2=new T(12,30,10);
     System.out.println("t1="+t1+"-"+"t2="+t2);
     t1.setT(23,63,59);
     System.out.println("t1="+t1+"-"+"t2="+t2);
     t1.setT(19,21,40);
     System.out.println("t1="+t1+"-"+"t2="+t2);
     t1.addT(t2);
     System.out.println("t1="+t1+"-"+"t2="+t2);
     t2.subT(t1);
     System.out.println("t1="+t1+"-"+"t2="+t2);
} //fine main
} //fine classe progT

class T {
private int ore;
private int min;
private int sec;
public T() {this(0,0,0);}
public T(int o, int m, int s) {
     if (isT(o,m,s)) {ore = o; min = m;sec = s;}
     else { System.out.println("Errore");
     ore = 0; min = 0; sec = 0;
     }
}
public boolean isT(int o, int m, int s) {
return (o>=0 && o<=24 && m>=0 && m<=60 && s>=0 && s<=60);
}
public void setT(int o, int m, int s) {
      if (isT(o,m,s)) {ore = o;min = m;sec = s;}
      else System.out.println("Errore");
}
public void addT(T t) {
     sec=sec+t.getSec();
     if(sec > 59){sec=sec-60;min++;}
     min=min+t.getMin();
     if(min > 59){min=min-60;ore++;}
     ore=ore+t.getOre();
     if(ore > 23)ore=ore-24;
}
public void subT(T t) {
     if(sec < t.getSec()){min--;sec=sec+60-getSec();}
     else sec=sec-t.getSec();
     if(min < t.getMin()){ore--;min=min+60-getMin();}
     else min=min-t.getMin();
     ore=Math.abs(ore-t.getOre());
}
public int getOre() {return ore;}
public int getMin() {return min;}
public int getSec() {return sec;}
public String toString() {
return getOre()+":"+getMin()+":"+getSec();
}
}//fine classe T

Esistono due costruttori, quello privo di parametri imposta l'orario a 00:00:00, mentre l'altro accetta 3 parametri secondo il formato hh:mm:ss. E' da notare come una eventuale istruzione t2=t1 porti ad un effetto collaterale tipico degli oggetti Java:

come si vede in figura, dal momento dell'assegnazione in poi le due istanze punteranno alla stessa locazione di memoria e da li in poi modificando t1, si modificherebbe anche t2.
Alla fine viene usato il metodo toString() nel suo modo più consueto, cioè, per descivere l'oggetto di classe T come stringa di caratteri.