Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

Resolução

/**
 * Você trabalha no setor financeiro de uma empresa de serviços e é responsável por gerenciar
 * o vencimento das faturas dos clientes. Em alguns casos, os clientes solicitam um adiamento
 * da data de pagamento, e o sistema precisa calcular a nova data de vencimento com base na
 * quantidade de meses adicionados.
 *
 * Crie um programa que:
 *
 * Receba uma data de vencimento original.
 * Adicione um número de meses ao vencimento.
 * A data ajustada deve ser exibida no formato dd-MM-yyyy.
 * Saída esperada:
 *
 * Se a data de vencimento original for 20 de março de 2025 e o adiamento for de 1 mês, a saída deve ser:
 * Nova data de vencimento: 20-04-2025
 */

package com.github.lucasdevrj.exercicios;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;

public class AjustandoDataVencimento {
    public static void main(String[] args) {
        LocalDate dataDeVencimento;
        String dataDeVencimentoDigitada = "";
        int numeroDeMesesParaVencimento;

        Scanner entrada = new Scanner(System.in);

        System.out.print("Digite a data de vencimento da fatura: ");
        dataDeVencimentoDigitada = entrada.nextLine();

        while (!dataDeVencimentoDigitada.matches("\\d{2}/\\d{2}/\\d{4}")) {
            System.out.println("Digite uma data válida. Exemplo: 10/03/2026.");
            System.out.print("Digite a data de vencimento da fatura: ");
            dataDeVencimentoDigitada = entrada.nextLine();
        }

        System.out.print("Adicione o número de meses para o vencimento: ");
        numeroDeMesesParaVencimento = entrada.nextInt();

        while (numeroDeMesesParaVencimento <= 0) {
            System.out.println("Digite um número de meses faltante válido!");
            System.out.print("Adicione o número de meses para o vencimento: ");
            numeroDeMesesParaVencimento = entrada.nextInt();
        }

        String[] data = dataDeVencimentoDigitada.split("/");
        int dia = Integer.parseInt(data[0]);
        int mes = Integer.parseInt(data[1]);
        int ano = Integer.parseInt(data[2]);

        dataDeVencimento = LocalDate.of(ano, mes, dia);
        dataDeVencimento = dataDeVencimento.plusMonths(numeroDeMesesParaVencimento);

        DateTimeFormatter formatoDaData = DateTimeFormatter.ofPattern("dd-MM-yyyy");
        String dataFormatada = dataDeVencimento.format(formatoDaData);

        System.out.println("Nova data de vencimento: " + dataFormatada);

        entrada.close();
    }
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Beleza?

1 resposta
solução!

Olá, Lucas! Como vai?

Gostei da forma como você estruturou a validação dos dados de entrada antes de realizar o cálculo da nova data. O uso de LocalDate, plusMonths() e DateTimeFormatter mostrou uma boa aplicação dos conceitos apresentados na atividade. Além disso, a preocupação em validar o formato da data e impedir valores inválidos para os meses torna sua solução mais robusta.

Uma dica interessante para o futuro é utilizar diretamente o DateTimeFormatter para converter a data digitada em um objeto LocalDate, evitando a necessidade de usar split(). Veja este exemplo:


DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate data = LocalDate.parse("20/03/2025", formato);
System.out.println(data);

Neste exemplo, o código converte uma data em texto para um objeto LocalDate, deixando a leitura e manutenção mais simples.

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