1
resposta

Resolução do desafio "Controle de expediente"

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

public class Main {

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

        System.out.println("Digite o horário de entrada (HH:mm): ");
        LocalTime horarioEntrada = LocalTime.parse(scanner.nextLine(), formatoHorario);

        System.out.println("Digite a carga horária diária (em horas): ");
        int cargaDiaria = scanner.nextInt();
        scanner.nextLine();

        LocalTime horarioPrevisto = horarioEntrada.plusHours(cargaDiaria);

        System.out.println("Digite o horário real de saída (HH:mm): ");
        LocalTime horarioSaida = LocalTime.parse(scanner.nextLine(), formatoHorario);

        Duration diferenca = Duration.between(horarioPrevisto, horarioSaida);

        System.out.println("Horário de entrada: " + horarioEntrada.format(formatoHorario));
        System.out.println("Horário de saída previsto: " + horarioPrevisto.format(formatoHorario));
        System.out.println("Horário real de saída: " + horarioSaida.format(formatoHorario));

        if (horarioSaida.isAfter(horarioPrevisto)) {
            System.out.println("Saldo de horas: +" + diferenca.toHours() + "h " +
                    diferenca.toMinutesPart() + "min");
        } else if (horarioSaida.isBefore(horarioPrevisto)) {
            System.out.println("Saldo de horas: -" + Math.abs(diferenca.toHours()) + "h " +
                    Math.abs(diferenca.toMinutesPart()) + "min");
        } else {
            System.out.println("Saldo de horas: " + diferenca.toHours() + "h " +
                    diferenca.toMinutesPart() + "min");
        }

        scanner.close();
    }
}
1 resposta

Oi, Lucas, como vai?

O seu código utiliza de maneira eficiente as classes LocalTime e Duration para gerenciar o cálculo de jornada de trabalho, demonstrando um bom domínio sobre a manipulação de períodos temporais em Java. A implementação da lógica para diferenciar saldos positivos e negativos através dos métodos isAfter e isBefore torna o programa funcional e fácil de compreender para o usuário final.

Parabéns pela resolução do desafio e pela organização do código, especialmente pela correta limpeza do buffer do scanner após a leitura do inteiro.

Continue praticando e compartilhando seus projetos no fórum, pois estamos sempre à disposição para acompanhar sua evolução.

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