1
resposta

Exercício 10

import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;

public class Exercicios {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        DateTimeFormatter formato = DateTimeFormatter.ofPattern("HH:mm");

        System.out.print("Digite o horário de entrada (HH:MM): ");
        LocalTime entrada = LocalTime.parse(in.next(), formato);

        System.out.print("Digite a carga horária diária (em horas): ");
        int cargaHora = Integer.parseInt(in.next());

        LocalTime saidaPrevista = entrada.plusHours(cargaHora);

        System.out.print("Digite o horário de saída (HH:MM): ");
        LocalTime saida = LocalTime.parse(in.next(), formato);

        System.out.println();
        System.out.println("Horário de entrada: " + entrada.format(formato));
        System.out.println("Horário de saída previsto: " + saidaPrevista);
        System.out.println("Horário real de saída: " + saida);

        int totalMinutos = Math.toIntExact(Duration.between(entrada, saida).toMinutes());
        int cargaMinutos = cargaHora * 60;

        if (totalMinutos > cargaMinutos) {
            int saldo = totalMinutos - cargaMinutos;
            System.out.println("Saldo de horas: +" + saldo / 60 + "h " + saldo % 60 + "min");
        } else {
            int saldo = cargaMinutos - totalMinutos;
            System.out.println("Saldo de horas: -" + saldo / 60 + "h " + saldo % 60 + "min");
        }

    }
}
1 resposta

Olá, Bernardo! Como vai?

Agradeço por compartilhar

Seu exercício ficou bem organizado: você usou LocalTime, DateTimeFormatter e Duration de forma adequada para calcular o tempo entre entrada e saída. Um ponto que chamou atenção foi o uso de Duration.between(entrada, saida).toMinutes(), que deixa o cálculo do saldo bem direto.

Uma dica interessante para o futuro é usar Math.abs() pra evitar repetir parte do cálculo quando o saldo pode ser positivo ou negativo.


int diferenca = totalMinutos - cargaMinutos;
int saldo = Math.abs(diferenca);

String sinal = diferenca >= 0 ? "+" : "-";

System.out.println("Saldo de horas: " + sinal + saldo / 60 + "h " + saldo % 60 + "min");

Esse código calcula a diferença uma única vez, usa Math.abs() pra obter o valor positivo do saldo e define o sinal com base no resultado. Ótima construção no exercício, continue praticando.

Na sua visão, isolar a transformação e validação cronológica dos horários em verificações iniciais ajuda a manter a rotina de cálculos do seu projeto focada em uma única responsabilidade de forma mais organizada?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!