22.- Clase Hora
22.- Clase Hora
import java.util.*;
public class Hora{
/*La estructura de la clase Hora, con dos atributos que la conforman: h y m */
private int h;
private int m;
public Hora(int hor, int min){
this.h = hor;
this.m = min;
}
public Hora(){
this.h = horaActual().h;
this.m = horaActual().m;//Usamos el metodo horaActual() en el constructor, para no repetir código.
}
public int getH(){return this.h;}//devuelve this.h;
public int getM(){return this.m;}//devuelve this.m;
public void setH(int hor){this.h=hor;}//sustituye this.h por hor
public void setM(int min){this.m = min;}//sustituye this.m por min
public boolean esValida(){
if(this.h >=0&&this.h<=23&&this.m>=0&&this.m<=59)return true;
else return false;
}
public String hora(){
if(esValida()) {
String hor = null; String min = null;
if (this.h < 10 ) hor = "0"+h;else hor = ""+h;
if (this.m < 10 ) min = "0"+m;else min = ""+m;
return "\""+hor+":"+min+"\""+"\t";
}
else return "Hora no válida";
}
public static Hora horaActual(){
long seg = System.currentTimeMillis()/1000;
seg = seg%(24*60*60);
int hor = (int) seg/(60*60);
seg = seg -hor*(60*60);
int min = (int)seg/60;
hor = hor+2;//2 horas de diferencia horario verano
Hora hAct = new Hora(hor,min);
return hAct;
}
public static Hora valueOf(String hhmm){
int h1 =(int)(hhmm.charAt(0)-'0');
int h2 =(int)(hhmm.charAt(1)-'0');
int m1 =(int)(hhmm.charAt(3)-'0');
int m2 =(int)(hhmm.charAt(4)-'0');
Hora hora1 = new Hora(h1*10+h2,m1*10+m2);
return hora1;
}
public int aMinutos(){
if(esValida()){
int minutos = this.h*60 +this.m;
return minutos;}
else return -1;
}
public int difMinutos(Hora hora2){//diferencia en minutos entres dos horas
Scanner t = new Scanner(System.in).useLocale(Locale.US);
Hora hora1 = new Hora(this.h,this.m);
hora1.aMinutos();
System.out.println("Introduzca la hora [0..23]");
h = t.nextInt();
System.out.println("Introduzca los minutos [0..59]");
m = t.nextInt();
hora2 = new Hora(h,m);
hora2.aMinutos();
System.out.println(hora2.aMinutos()-hora1.aMinutos());//diferencia en minutos entres dos horas
return hora2.aMinutos()-hora1.aMinutos();
}
public String toString(){ //Constructor horas manualmente
String hh = null;String mm = null;
Hora h1 = new Hora(this.h, this.m);
if(h<=9)hh= 0+""+h1.h;else hh =""+h1.h;
if(m<=9)mm= 0+""+h1.m;else mm =""+h1.m;
//System.out.println(hh+":"+mm);
return hh+":"+mm;
}
public int compareTo(Hora hora2){
Scanner t = new Scanner(System.in).useLocale(Locale.US);
Hora hora1 = new Hora(this.h, this.m);
System.out.println("Introduzca la hora [0..23]");
int hora = t.nextInt();
System.out.println("Introduzca los minutos [0..59]");
int minutos = t.nextInt();
hora2 = new Hora(hora, minutos);
int a = (hora1.toString().compareTo(hora2.toString()));
System.out.println(a);
return a;
}
public boolean equals(Object o){
return o instanceof Hora
&& this.h == ((Hora) o).h
&& this.m == ((Hora) o).m;
}
public static void main(String[] arg){//método main para probar
Scanner t = new Scanner(System.in).useLocale(Locale.US); int opc =0;
do{
System.out.println("\t\t\t MENU: ELIJA UNA OPCION");
System.out.println();
System.out.println("\t 1.- CONSTRUIR UNA HORA EN FORMATO HORA");
System.out.println("\t 2.- CONSTRUIR UNA HORA EN FORMATO STRING HH:MM");
System.out.println("\t 3.- CONVERTIR UNA HORA EN FORMATO HORA A MINUTOS");
System.out.println("\t 4.- CONVERTIR UNA HORA EN FORMATO STRING A MINUTOS");
System.out.println("\t 5.- OBTENER LA DIFERENCIA EN MINUTOS DE DOS HORAS EN FORMATO HORA");
System.out.println("\t 6.- OBTENER LA DIFERENCIA EN MINUTOS DE DOS HORAS EN FORMATO STRING");
System.out.println("\t 7.- COMPARE DOS HORAS EN FORMATO HORA");
System.out.println("\t 8.- COMPARE DOS HORAS EN FORMATO STRING");
System.out.println("\t 9.- HACER UN RELOJ DIGITAL");
System.out.println("\t 0.- FIN");
opc = t.nextInt();
switch(opc){
case 1: System.out.println("Introduzca la hora [0..23]");
int h = t.nextInt();
System.out.println("Introduzca los minutos [0..59]");
int m = t.nextInt();
Hora hora1 = new Hora(h,m);
if( hora1.esValida())System.out.println(hora1.toString());else System.out.println("Hora no válida");break;
case 2: System.out.println("Introduzca la hora como un String del formato HH:MM");
String hhmm = t.next();
hora1 = valueOf(hhmm);
if(hora1.esValida())System.out.println(hora1.toString());break;
case 3: System.out.println("Introduzca la hora [0..23]");
h = t.nextInt();
System.out.println("Introduzca los minutos [0..59]");//valueOf(String hhmm)
m = t.nextInt();
hora1 = new Hora(h,m);
if( hora1.esValida())System.out.println(hora1.aMinutos());else System.out.println("Hora no válida");break;
case 4: System.out.println("Introduzca la hora como un String del formato HH:MM");
hhmm = t.next();
hora1 = valueOf(hhmm);
if(hora1.esValida())System.out.println(hora1.aMinutos());break;
case 5: int aMinutos1 =0; int aMinutos2=0;
System.out.println("Introduzca la hora [0..23]");
h = t.nextInt();
System.out.println("Introduzca los minutos [0..59]");//valueOf(String hhmm)
m = t.nextInt();
hora1 = new Hora(h,m);
if( hora1.esValida())aMinutos1 = hora1.aMinutos();
else System.out.println("Hora no válida");
System.out.println("Introduzca la segunda hora [0..23]");
h = t.nextInt();
System.out.println("Introduzca los minutos de la segunda hora [0..59]");//valueOf(String hhmm)
m = t.nextInt();
hora1 = new Hora(h,m);
if( hora1.esValida()) aMinutos2 = hora1.aMinutos();
else System.out.println("Hora no válida");
int difMinutos = aMinutos2-aMinutos1;System.out.println(difMinutos);break;
case 6: aMinutos1 =0; aMinutos2=0;
System.out.println("Introduzca la hora como un String del formato HH:MM");
hhmm = t.next();
hora1 = valueOf(hhmm);
if(hora1.esValida()) aMinutos1 = hora1.aMinutos();
else System.out.println("Hora no válida");
System.out.println("Introduzca la segunda hora como un String del formato HH:MM");
hhmm = t.next();
hora1 = valueOf(hhmm);
if(hora1.esValida()) aMinutos2 = hora1.aMinutos();
else System.out.println("Hora no válida");
difMinutos = aMinutos2-aMinutos1;System.out.println(difMinutos);break;
case 7: System.out.println("Introduzca la hora [0..23]");
h = t.nextInt();
System.out.println("Introduzca los minutos [0..59]");//valueOf(String hhmm)
m = t.nextInt();
hora1 = new Hora(h,m);
if( hora1.esValida())hora1=hora1;
else System.out.println("Hora no válida");
System.out.println("Introduzca la segunda hora [0..23]");
h = t.nextInt();
System.out.println("Introduzca los minutos de la segunda hora [0..59]");//valueOf(String hhmm)
m = t.nextInt();
Hora hora2 = new Hora(h,m);
if( hora2.esValida())hora2 = hora2;
else System.out.println("Hora no válida");
int a = (hora1.toString().compareTo(hora2.toString()));
System.out.println(a);break;
case 8: System.out.println("Introduzca la hora como un String hh:mm");//valueOf(String hhmm)
hhmm = t.next();
hora1 = valueOf(hhmm);
if( hora1.esValida())hora1=hora1;
else System.out.println("Hora no válida");
System.out.println("Introduzca la segunda hora como un String hh:mm");
hhmm = t.next();
hora2 = valueOf(hhmm);
if( hora2.esValida())hora2 = hora2;
else System.out.println("Hora no válida");
a = (hora1.toString().compareTo(hora2.toString()));
System.out.println(a);break;
case 9: while(horaActual().h <25){//con esto producimos un bucle infinito que nos permite tener como un reloj con la hora "hh:mm:ss";
//podríamos hacer que el bucle terminase en una hora determinada.
System.out.println("\t\t"+horaActual().toString()+"\f");
}
;break;
case 0: System.out.println("Acabé. Hasta pronto");System.exit(0);break;
}
}while(opc>=0&&opc <=9);
}
}
Comentarios
Publicar un comentario