Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Unrealjose en 6 Abril 2017, 19:33 pm



Título: Ayuda con un codigo Java respecto a horas/minutos/segundos y sumas con ellas
Publicado por: Unrealjose en 6 Abril 2017, 19:33 pm
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
  1. package Capitulo3.SinTerminar;
  2. import java.util.Scanner;
  3. public class Ejercicio2 {
  4. //El programa debe pedir una hora ingresando Horas, Minutos y Segundos y depsues sumarle X segundos
  5. public static void main(String[]args){
  6. Scanner sc=new Scanner(System.in);
  7. int h,m,s,num;
  8. boolean h1=true,h2=true,m1=true,m2=true,s1=true,s2=true;
  9. do{
  10. System.out.print("Ingrese la hora(00-23): ");
  11. h=sc.nextInt();
  12. if(h<=23){h1=true;}else{h1=false;}
  13. if(h>=00){h2=true;}else{h2=false;}
  14. }while(h1!=true||h2!=true);
  15. do{
  16. System.out.print("Ingrese los minutos(00-59): ");
  17. m=sc.nextInt();
  18. if(m<=59){m1=true;}else{m1=false;}
  19. if(m>=00){m2=true;}else{m2=false;}
  20. }while(m1!=true||m2!=true);
  21. do{
  22. System.out.print("Ingrese los segundos(00-59): ");
  23. s=sc.nextInt();
  24. if(s<=59){s1=true;}else{s1=false;}
  25. if(s>=00){s2=true;}else{s2=false;}
  26. }while(s1!=true||s2!=true);
  27. System.out.println("Son las "+h+":"+m+":"+s+".");
  28. System.out.print("Ingrese el numero de segundos en los que quieres incrementar la hora:");
  29. num=sc.nextInt();
  30. int a,b,c,d,e;
  31. a=s*3600;
  32. b=m*60;
  33. c=s;
  34. d=a+b+c;
  35. e=d+num;
  36. h=(int)e/3600;
  37. m=(int)(e-(e/3600))/60;
  38. s=(int)(e-(m*60));
  39. System.out.print("La nueva hora es: "+h+":"+m+":"+s);
  40. }
  41. }[/code=java]
  42.  
  43. 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.
  44. 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.


Título: Re: Ayuda con un codigo Java respecto a horas/minutos/segundos y sumas con ellas
Publicado por: Serapis en 6 Abril 2017, 20:32 pm
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...


Título: Re: Ayuda con un codigo Java respecto a horas/minutos/segundos y sumas con ellas
Publicado por: 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


Título: Re: Ayuda con un codigo Java respecto a horas/minutos/segundos y sumas con ellas
Publicado por: Unrealjose en 6 Abril 2017, 20:44 pm
Citar
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...

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


Título: Re: Ayuda con un codigo Java respecto a horas/minutos/segundos y sumas con ellas
Publicado por: Unrealjose en 6 Abril 2017, 20:45 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