Ayuda con problema de reloj en java!

Iniciado por robertoht, 18 Junio 2015, 06:05 AM

0 Miembros y 1 Visitante están viendo este tema.

robertoht

Alguien me puede ayudar a resolver este ejercicio! Me urge un poco. :P

Cree un método llamado tipoHora que valide diferentes horas según un atributo
entero. Que dado su valor imprima si es madrugada mañana, mediodía,
tarde:

◦ 00:01 a 05:59 madrugada (el valor sería de 1 a 559)
◦ 06:00 a 11:59 mañana (el valor sería de 600 a 1159)
◦ 12:00 Medio día (el valor sería de 1200)
◦ 12:01 a 17:59 tarde (el valor sería de 1201 a 1759)
◦ 18:00 a 11:59 noche (el valor sería de 1800 a 2359)
◦ 24:00 Media noche (el valor sería de 2400)
◦ Cualquier otro valor da error.

El inicio del método sería:
public void tipoHora(int hora) {
//... acá va su código
}

Debe validar que los minutos no estén entre 60 y 99 si es así debe desplegar un error
(por ejemplo 470 es un error).

----------------------------------------------------------------------------------------------
Esto es lo que llevo por ahora, pero la parte de los minutos no se como hacerla. Creo que se hace con el operador módulo, pero no se como se hace.


Código (java) [Seleccionar]
public void tipoHora(int hora) {

if (hora >= 1 && hora <= 559) {
System.out.println("Es la Madrugada!!");
} else {

if (hora >= 600 && hora <= 1159) {
System.out.println("Es de Mañana!!");
} else {
if (hora == 1200) {
System.out.println("Es Medio Dia!!");
} else {
if (hora >= 1201 && hora <= 1759) {
System.out.println("Es la Tarde!!");
} else {
if (hora >= 1800 && hora <= 2359) {
System.out.println("Es la Noche!!");
} else {
if (hora == 2400) {
System.out.println("Es la Media Noche!!");
} else {
if (hora >= 2400) {
System.out.println("ERROR!!");
} else {

}
}
}
}
}
}
}
}
}

Y lo llamo desde mi main asi

ejemploramdon rt = new ejemploramdon();
rt.ejemplo(aqui se pone la hora);

3n31ch

#1
Hola amigo. Primero, te explico.

Antes de todo, al publicar en este foro algún código, debes utilizar las etiquetas GeShi, justo cuando publicas tu código hay un listbox que dice por defecto GeShi, al cliquearlo te aparecerán muchos lenguajes. En este caso seleccionas Java y entre medio de lo que te aparezca pones tu código.

En segunda, por favor, pon correctamente el indentado, porque o si no hace difícil leer el codigo.

Primero, creo que tienes mal puesto un signo llave, verificarlo, antes de continuar.
En segunda, tu procedimiento, aunque efectivo, es el inadecuado. Cuando requieras hacer if "exclusivos" lo adecuado no es poner un if dentro del else, sino, hacer lo siguiente:
Código (java) [Seleccionar]

       if (hora >= 1 && hora <= 599){
           System.out.println("Es la Madrugada!!");
       } else if(hora >= 600 && hora <= 1159){
           System.out.println("Es de Mañana!!");
       }


Tu código quedaría algo así:

Código (java) [Seleccionar]
   public void tipoHora(int hora) {
       if (hora >= 1 && hora <= 599){
           System.out.println("Es la Madrugada!!");
       } else if(hora >= 600 && hora <= 1159) {
           System.out.println("Es de Mañana!!");
       } else if(hora == 1200) {
           System.out.println("Es Medio Dia!!");
       } else if(hora >= 1201 && hora <= 1759) {
           System.out.println("Es la Tarde!!");
       } else if(hora >= 1800 && hora <= 2359) {
           System.out.println("Es la Noche!!");
       } else if(hora == 2400) {
           System.out.println("Es la Media Noche!!");
       }
   }


Bueno, una vez ya hemos arreglado eso, el procedimiento puede divergir, pero yo prefiero validar antes que nada, así que inicialmente validaremos que el valor ingresado no sea ni menor que 0, ni mayor que 2400

Código (java) [Seleccionar]
       if(hora > 2400 || hora < 0){
           System.out.println("Error. La hora no puede ser menor a 0 o mayor a 2400");
       } else if (hora >= 1 && hora <= 599){ /* Lo unimos a lo anterior ...*/


Esto lo unimos a lo anterior.

Bueno, ahora tenemos que validar que los  ultimos dos digitos no sean ni mayor o igual a 60.

Para extraer los dos últimos dígitos, lo haces con el resto o modulo - como bien dices -.

hora % 100 = a los dos últimos decimales. Si no lo entiendes, ejecuta la operación manualmente y te darás cuenta del porque.

ahora a ese resultado le agregamos que los últimos dos dígitos si son mayor o igual a 60 se lanza un error.

Código (java) [Seleccionar]
       if(hora % 100 >= 60){
           System.out.println("Error. Los minutos no pueden ser mayor o igual a 60");
       }


Bueno, eso lo unes a lo anterior (en mi caso, lo ordene un poco) y obtienes lo siguiente:


Código (java) [Seleccionar]
public void tipoHora(int hora) {
       if(hora > 2400 || hora < 0){ /* Primero valido que no sea menor a 0 o mayor a 2400 */
           System.out.println("Error. La hora no puede ser menor a 0 o mayor a 2400");
       } else if(hora % 100 >= 60){ /* Luego valido el minutero */
           System.out.println("Error. Los minutos no pueden ser mayor o igual a 60");
       } else if (hora >= 1 && hora <= 599){
           System.out.println("Es la Madrugada!!");
       } else if(hora >= 600 && hora <= 1159) {
           System.out.println("Es de Mañana!!");
       } else if(hora == 1200) {
           System.out.println("Es Medio Dia!!");
       } else if(hora >= 1201 && hora <= 1759) {
           System.out.println("Es la Tarde!!");
       } else if(hora >= 1800 && hora <= 2359) {
           System.out.println("Es la Noche!!");
       } else if(hora == 2400 || hora == 0) {
           System.out.println("Es la Media Noche!!");
       }
   }


Y ya esta terminado. Recuerda modificar tu mensaje y agregar las etiquetas para el codigo Java.

Por cierto, ve bien como estas usando tu método, porque no creo que esa sea la forma adecuada de hacerlo. Suerte. Cualquier pregunta, hazla.

robertoht

Man de verdad muchas gracias por la ayuda. Ya corregí lo del GeSDhi.
Y sorry por no escribir bien, apenas es mi primer cuatri de carrera lo estoy empezando, hay cosas que no me han explicado.

Saludos