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);
}
}
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.
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...
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
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.
Ah! Que burrice a minha! Faz todo o sentido, claro! Mas se não fosse voçe provavelmente não chegaria lá 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);
}
}
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);
}
}