Ayuda con un codigo Java respecto a horas/minutos/segundos y sumas con ellas

Iniciado por Unrealjose, 6 Abril 2017, 19:33 PM

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

Unrealjose

Buenas a todos,soy nuevo tanto en este foro como en la programacion(apenas se cuatro cosas mal contadas).
Estoy aprendiendo Java con un libro,al final de cada capitulo te da unos cuantos ejercicios resueltos y ejercicios para que lo resolvamos y estoy teniendo problemas con uno de ellos.

El ejercicio me pide que ingrese una hora/minutos/segundo(tiene que ser correcto,es decir,no vale 30 horas o 72 min) y despues que ingrese un numero(en segundos) que se sumara a la hora dando una hora correcta(en horas/minutos/segundos).
Pero no consigo hacerlo,me da muchos problemas.

Vengo aqui para ver si alguien me puede ayudar a hacerlo(a ser posible explicandome mis errores y asi se que es lo que no debo hacer cuando tenga que volver a hacer algo parecido).

Dejo el codigo que llevo echo abajo(echo en Eclipse),y antes de nada dejar claro que solo se hacer condicionales,bucles y funciones y por el capitulo en el que me dieron el ejercicio,se deberia poder hacer solo con condicionales y bucles,pongo esto mas que nada porque todavia no tengo ni idea ni de tablas ni de clases ni de nada mas complejo que condicionales,bucles y funciones.

Muchas gracias de antemano.

Código (java) [Seleccionar]
package Capitulo3.SinTerminar;
import java.util.Scanner;
public class Ejercicio2 {
//El programa debe pedir una hora ingresando Horas, Minutos y Segundos y depsues sumarle X segundos
public static void main(String[]args){
Scanner sc=new Scanner(System.in);
int h,m,s,num;
boolean h1=true,h2=true,m1=true,m2=true,s1=true,s2=true;
do{
System.out.print("Ingrese la hora(00-23): ");
h=sc.nextInt();
if(h<=23){h1=true;}else{h1=false;}
if(h>=00){h2=true;}else{h2=false;}
}while(h1!=true||h2!=true);
do{
System.out.print("Ingrese los minutos(00-59): ");
m=sc.nextInt();
if(m<=59){m1=true;}else{m1=false;}
if(m>=00){m2=true;}else{m2=false;}
}while(m1!=true||m2!=true);
do{
System.out.print("Ingrese los segundos(00-59): ");
s=sc.nextInt();
if(s<=59){s1=true;}else{s1=false;}
if(s>=00){s2=true;}else{s2=false;}
}while(s1!=true||s2!=true);
System.out.println("Son las "+h+":"+m+":"+s+".");
System.out.print("Ingrese el numero de segundos en los que quieres incrementar la hora:");
num=sc.nextInt();
int a,b,c,d,e;
a=s*3600;
b=m*60;
c=s;
d=a+b+c;
e=d+num;
h=(int)e/3600;
m=(int)(e-(e/3600))/60;
s=(int)(e-(m*60));
System.out.print("La nueva hora es: "+h+":"+m+":"+s);
}
}[/code=java]

pd: La unica forma que tengo para asegurarme que al insertar un numero sea valido(es decir,entre 0 y 23 para horas y 0-59 para minutos y segundos) es con el codigo que hay en las lineas  9-14;15-20;21-26.
Mi duda respecto a ese codigo es si hay otra forma,porque este lo veo muy,muy lioso,me saio despues de un buen rato de probar combinaciones raras.
"La verdad es siempre revolucionaria."  ― Lenin

Serapis

No necesitas dos variables buleanas adicionales para preguntar sobre la hora, minuto o segundo...
Una expresión puede dar como resultado un valor buleano, sin necesidad de que hayas declarado una variable de ese tipo y asignado un valor...
Desde el momento en que el usuario introduce un valor y este se almacena y/o extrae en 'h' (por ejemplo), basta 'h', para saber:
si (h es menor que 0) Ó (si h es mayor que 23) ...esto es una expresión y devolverá  TRUE o FALSE...

Por tanto se puede simplificar y aclarar el código, preguntando así al bucle:

Hacer
....
Mientras (h>23) ó (h<0)


p.d.:
El resto son matemáticas sencillas (sumar, multiplicar, restar, etc..), que deberias resolver por tí mismo, si no da correcto...

engel lex

yo personalmente recomiendo, convierte a tiempo unix que son segundos, sumas y restas sin complicaciones y conviertes de nuevo de tiempo unix a fecha
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Unrealjose

CitarNo necesitas dos variables buleanas adicionales para preguntar sobre la hora, minuto o segundo...
Una expresión puede dar como resultado un valor buleano, sin necesidad de que hayas declarado una variable de ese tipo y asignado un valor...
Desde el momento en que el usuario introduce un valor y este se almacena y/o extrae en 'h' (por ejemplo), basta 'h', para saber:
si (h es menor que 0) Ó (si h es mayor que 23) ...esto es una expresión y devolverá  TRUE o FALSE...

Por tanto se puede simplificar y aclarar el código, preguntando así al bucle:

Hacer
....
Mientras (h>23) ó (h<0)

p.d.:
El resto son matemáticas sencillas (sumar, multiplicar, restar, etc..), que deberias resolver por tí mismo, si no da correcto...

Muchas gracias NEBIRE,lo he probado y funciona a la perfeccion y sin tener que calentarse tanto la cabeza como para hacer lo que hize xD
"La verdad es siempre revolucionaria."  ― Lenin

Unrealjose

Cita de: engel lex en  6 Abril 2017, 20:39 PM
yo personalmente recomiendo, convierte a tiempo unix que son segundos, sumas y restas sin complicaciones y conviertes de nuevo de tiempo unix a fecha

Gracias por la repuesta,ahora mismo voy a buscar en internet como hacer eso de convertir el tiempo a tiempo unix
"La verdad es siempre revolucionaria."  ― Lenin