Autor Tema: como cambiar formatos de horas?(reedición)  (Leído 3612 veces)

Jp123

  • Sin experiencia
  • *
  • Mensajes: 4
    • Ver Perfil
como cambiar formatos de horas?(reedición)
« en: 25 de Noviembre 2022, 19:50 »
Hola comunidad.
Anteriormente, ya había publicado un problema con la misma pregunta, pero me percaté que hice la pregunta mal e incompleta.
Realmente necesito ayuda al momento que quiero imprimir el caso 6 me da error:

case 6:
                    ingreso.impHora24(String str);
                    break;
Realmente no se que estoy haciendo mal.
Adjunto el código completo...

/*
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template
 */
package p33;
import java.util.Scanner;

/**
 *
 * @author user
 */
public class P33 {
    int hora;
    int minutos;
    int segundos;

    public P33() {
        hora = 0;
        minutos = 0;
        segundos = 0;
    }
    public P33(int hora, int minutos, int segundos) {
        this.hora = hora;
        this.minutos = minutos;
        this.segundos = segundos;
    }

    public int getHora() {
        return hora;
    }

    public int getMinutos() {
        return minutos;
    }

    public int getSegundos() {
        return segundos;
    }

    public void setHora(int hora) {
        this.hora = hora;
    }

    public void setMinutos(int minutos) {
        this.minutos = minutos;
    }

    public void setSegundos(int segundos) {
        this.segundos = segundos;
    }
   
    public void horaValida(){
        if ((hora>=0 && hora<=24) && (minutos>=0 && minutos<=59) && (segundos>=0 && segundos<=60)){
            System.out.println("La hora esta correctamente ingresada");                       
        }else {
            System.out.println("La hora no esta ingresada correctamente");
        }   
    }
     public void incrementarHora24(){
        hora = hora+1;
        if (hora>=0  && (hora<24)){
            System.out.println("La hora nueva es: "+hora+":"+minutos+":"+segundos+"hora militar");                       
        }else {
            hora = 0;
            System.out.println("La hora nueva es: "+hora+":"+minutos+":"+segundos+"hora militar");     
        } 
     }
       
     public void impHora12(){
     
        if (hora>=1  && (hora<12)){
            System.out.println("La hora nueva es: "+hora+":"+minutos+":"+segundos+" en formato 12 horas");                       
        }else {
            hora = hora-12;
            System.out.println("La hora nueva es: "+hora+":"+minutos+":"+segundos+" formato 12 horas");     
        } 
       
    }
     
      public static void impHora24(String str){
    // Get hours
    int h1 = (int)str.charAt(1) - '0';
    int h2 = (int)str.charAt(0) - '0';
    int hh = (h2 * 10 + h1 % 10);
 
    // If time is in "AM"
    if (str.charAt(8) == 'A')
    {
        if (hh == 12)
        {
            System.out.print("00");
            for (int i = 2; i <= 7; i++)
                System.out.print(str.charAt(i));
        }
        else
        {
            for (int i = 0; i <= 7; i++)
                System.out.print(str.charAt(i));
        }
    }
 
    // If time is in "PM"
    else
    {
        if (hh == 12)
        {
            System.out.print("12");
            for (int i = 2; i <= 7; i++)
                System.out.print(str.charAt(i));
        }
        else
        {
            hh = hh + 12;
            System.out.print(hh);
            for (int i = 2; i <= 7; i++)
                System.out.print(str.charAt(i));
        }
    }
}
     
      public void incrementarMinutos(){
        minutos = minutos+1;
        if (minutos>=0  && (minutos<60)){
            System.out.println("La hora nueva es: "+hora+":"+minutos+":"+segundos+"hora militar");                       
        }else {
             
            minutos = 0;
            System.out.println("La hora nueva es: "+hora+":"+minutos+":"+segundos+"hora militar");     
        }   
      }
      public void incrementarSegundos(){
        segundos = segundos+1;
        if (segundos>=0  && segundos<60){
            System.out.println("La hora nueva es: "+hora+":"+minutos+":"+segundos+"hora militar");                       
        }else {
            segundos = 0;
            System.out.println("La hora nueva es: "+hora+":"+minutos+":"+segundos+"hora militar");     
        }   
      }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        int hora, minutos, segundos, opc;
        P33 ingreso = new P33();
        Scanner sc = new Scanner(System.in);
        do{
            System.out.println("\n1) ingresar la hora");
            System.out.println("2) validar hora");
            System.out.println("3) incrementar una hora");
            System.out.println("4) incrementar un minuto");
            System.out.println("5) incrementar un segundo");
            System.out.println("6) imprimir hora en formato militar");
            System.out.println("7) imprimir hora en formato 12 horas");
            System.out.println("8) Salir ");
           
            opc = sc.nextInt();
            switch (opc) {
                case 1:
                    System.out.println("ingrese la hora");
                    hora = sc.nextInt();
                    System.out.println("ingrese los minutos");
                    minutos = sc.nextInt();
                    System.out.println("ingrese los segundos");
                    segundos = sc.nextInt();
                    ingreso.setHora(hora);
                    ingreso.setMinutos(minutos);
                    ingreso.setSegundos(segundos);
                    break;
                case 2:
                    ingreso.horaValida();
                    break;
                case 3:
                    ingreso.incrementarHora24();
                    break;
                case 4:
                    ingreso.incrementarMinutos();
                    break;
                case 5:
                    ingreso.incrementarSegundos();
                    break;
                case 6:
                    ingreso.impHora24(String str);
                    break;
                case 7:
                    ingreso.impHora12();
                    break;
                   
            }
        } while(opc!=8);
    }
}

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: como cambiar formatos de horas?(reedición)
« Respuesta #1 en: 25 de Noviembre 2022, 20:28 »
A ver, en el case 6.

Hay dos cosas mal.


Estás llamando al método impHora24(), y cuando lo llamas no puedes decirle el tipo de parámetro que recibe:
Citar
                case 6:
                    ingreso.impHora24(String str);
                    break;

Simplemente, le has de decir el nombre del parámetro:
Citar
                case 6:
                    ingreso.impHora24(str);
                    break;

Segunda cosa mal.
A ese método, le estás dando un String.

Pero, en tu programa.., no hay ningún String por ningún sitio.
No estás trabajando con Strings, estás trabajando con tres enteros:
Código: [Seleccionar]
public class P33 {
    int hora;
    int minutos;
    int segundos;

Así que,
 o cambias el programa main principal para que por algún sitio le pidas un String al usuario....
 o reescribes el método impHora24() (supongo lo copiaste de algún sitio) para que trabaje con los tres enteros en lugar de con un String.


En cualquier caso, sigues teniendo el mismo problema que te comenté en el otro mensaje:
Necesitas conocer el meridiano para identificar la hora correctamente cuando está en formato 12 horas

El método impHora24() que has usado, utiliza un String precisamente para poder manejar el dato del meridiano. Está diseñado para recibir toda la información de la hora en un solo String, sin enteros, incluyendo el meridiano.

Pero si usas solamente los 3 enteros: horas, minutos y segundos, jamás podrás saber el meridiano.

Así que has de cambiar el diseño del programa. O usas un único String con todo, o como hice yo, usas enteros + 1 String para el dato del meridiano.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".