Converter Segundos para Horas:Minutos:Segundos - Métodos Java

Boas pessoal. Eu tenho andado a fazer um código para um trabalho com o uso de métodos em Java e não funciona. Poderão me ajudar onde terei errado no código?
Vou postar o código aqui:

import java.util.Scanner;

public class Ex_7 {
    public static void main(String[] args) {
        int seg = pedirsegundos();
        int segundos = calcseg(seg);
        int minutos = calcmins(segundos);
        int minuto = calcmin(minutos);
        int hora = hora(minutos);

        System.out.print("Os segundos introduzidos em horas é"+hora+" : "+minuto+" : "+minutos+" : "+segundos);
    }
    public static int pedirsegundos(){
        Scanner teclado=new Scanner(System.in);
        System.out.print("Insira os segundos ");
        int segundos=teclado.nextInt();
        return segundos;
    }
    public static int calcseg(int seg){

        return (seg % 60);
    }

    public static int calcmins(int minutos){

        return (minutos / 60);

    }

    public static int calcmin(int minuto){

        return (minuto % 60);
    }

    public static int hora(int minutos){

        return (minutos / 60);
    }

}

Tens dois problemas no teu código:

System
  .out
  .print("Os segundos introduzidos em horas é"+hora+" : "+minuto+" : "+minutos+" : "+segundos);

Duas vezes valor para minutos? Um deles está a mais.

int minutos = calcmins(segundos);

Queres saber quantos minutos correspondem aos segundos que tu introduziste ou aos segundos que tu calculaste?

Não sei se entendi muito bem mas acho que quer fazer métodos q transforme os segundos que foram informados para minutos e horas. Bom eu refiz e percebi que foi usado int sendo q o resultado possivelmente seria double em alguns casos então passei tudo para double trabalhei com double e para fazer divisões normalmente se usa o / pois o % devolve os números q vierem depois da virgula do resultado.

public static void main(String[] args) {
        double seg = pedirsegundos();
        double minuto = calcmin(seg);
        double hora = hora(minuto);

        System.out.print("Os segundos introduzidos em horas é" + hora + " : " + minuto + " : " + seg);
    }

    public static double pedirsegundos() {
        Scanner teclado = new Scanner(System.in);
        System.out.print("Insira os segundos ");
        int segundos = teclado.nextInt();
        return segundos;
    }

    public static double calcmin(double minuto) {
        return (minuto / 60);
    }

    public static double hora(double minutos) {

        return (minutos / 60);
    }

Boas. Antes de mais obrigado pela resposta. Quero saber quantas horas minutos e segundos correspondem aos segundos introduzidos pelo usuário a partir de métodos.

Tentei a tua forma mas sem sucesso.

class Main {
    public static void main(String[] args) {
        int input = 5418;// 1h : 30 min : 18 seg
        int horas = input / 3600;
        int minutos = (input - (horas * 3600)) / 60;
        int segundos = input - (horas * 3600) - (minutos * 60);
        System.out.printf("Horas: %d%nMinutos: %d%nSegundos: %d%n", horas, minutos, segundos);
    }
}
1 curtida

A minha pergunta era retórica. Eu sei a resposta. Será que o que tens no teu código é o que tu pretendes?

Só precisas de alterar as duas linhas que eu destaquei: na primeira para retirar a impressao de “minutos” que é apenas uma valor auxiliar. Na segunda para corrigires o parâmetro.

  int seg = pedirsegundos();  // Imagina que introduzes 150.
  int segundos = calcseg(seg);  // 150%60 = 30 --> irá ser qualquer coisa e 30 segundos
  int minutos = calcmins(segundos);  // aqui queres saber os minutos de 30 segundos? não me parece...
1 curtida

Ah! Não tinha entendido a sua observação anterior. Percebi a primeira mudança a segunda é que já não estou a perceber muito bem… Desculpe é que eu iniciei java à muito pouco tempo :confused:

Na ultima linha de código que eu destaquei, tu estas a passar “segundos” que é o valor que calculaste para mostrar na hora final.
Mas tu queres saber os minutos a que correspondem os “seg” que tu introduziste.

1 curtida

Obrigado pela sua ajuda, mas como referi no tópico é tornar num método esse código que tenho dificuldade.

Ah! Que burrice a minha! Faz todo o sentido, claro! Mas se não fosse voçe provavelmente não chegaria lá :confused: Terei que me empenhar mais… Muito Obrigado pela sua ajuda. Pela de todos claro.

É só pegar essas contas e jogar em métodos, passando os parâmetros necessários e retornando o resultado da conta. Não tem muito como evitar essas subtrações/multiplicações/divisões, pois é inerente às conversões de segundo para horas e minutos.

Que tal usar as classes do Java 8?

import java.time.Duration;

class Main {
    public static void main(String[] args) {
        long input = 5418;
        Duration duracao =  Duration.ofSeconds(input);
        long horas = duracao.toHours();
        long minutos = duracao.minusHours(horas).toMinutes();
        long segundos = duracao.minusHours(horas).minusMinutes(minutos).getSeconds();
        System.out.printf("Horas: %d%nMinutos: %d%nSegundos: %d%n", horas, minutos, segundos);
    }
}
1 curtida

Vou tentar também da sua forma. :slight_smile:

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
	  		
	 int SEGUNDOS;
	 int MINUTOS;
	 int HORAS;
	 
	 	Scanner ENTRADA = new Scanner(System.in);
    	SEGUNDOS= ENTRADA.nextInt();
    
    	int S = SEGUNDOS %60; 
    		  
    	MINUTOS = SEGUNDOS /60; 
    	int M = MINUTOS % 60; 
    		  
    	HORAS = MINUTOS /60; 
    		  
    	String cvrt = String.format ("%01d:%01d:%02d",HORAS,M,S); 
    	System.out.printf(cvrt); 	  
  } 
}

import java.util.Scanner;

/**
*

  • @author maury
    */
    public class Tempo {

    private int horas;
    private int minutos;
    private int segundos;

    private int getHora() {
    return horas;
    }

    private void setHora(int hora) {
    if ((hora > 0) && (hora <= 23)) {
    this.horas = hora;
    }
    }

    private int getMinutos() {
    return minutos;
    }

    private void setMinutos(int minutos) {
    if ((minutos >= 0) && (minutos < 60)) {
    this.minutos = minutos;
    }
    }

    private int getSegundos() {
    return segundos;
    }

    private void setSegundos(int segundos) {
    if ((segundos >= 0) && (segundos < 60)) {
    this.segundos = segundos;
    }
    }

    public void leitura() {
    Scanner ler = new Scanner(System.in);
    System.out.println(“Informe um horario em segundos!”);
    int input = ler.nextInt();

     setHora(calcHoras(input));
     setMinutos(calcMinutos(input));
     setSegundos(calcSegundo(input));
    

    }

    private int calcSegundo(int input) {
    return input - (getHora() * 3600) - (getMinutos() * 60);
    }

    private int calcMinutos(int input) {
    return (input - (getHora() * 3600)) / 60;
    }

    private int calcHoras(int input) {
    return input / 3600;
    }

    public void printHora() {
    System.out.println("HORAS: " + getHora() + “:” + getMinutos() + “:” + getSegundos());
    }
    }