1
resposta

Desafio resolvido

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

public class AjustVencimento {
    public static void main(String[] args) {

        Scanner teclado = new Scanner(System.in);
        int ano = 0;
        int dia = 0;
        int mes = 0;
        int newmonths = 0;
        int ano_Atual = LocalDate.now().getYear();
        System.out.println("Informe a data:");
        while(true){
            try{
            System.out.println("Informe o ano:");
            ano = teclado.nextInt();
            if(ano!=ano_Atual){
                System.out.printf("Opção inválida ! Apenas %S\n", ano_Atual);
                continue;
            }
            break;}
            catch (InputMismatchException e){
                System.out.println("Apenas números !");
                teclado.nextLine();}
        }
        while(true){
            try{
        System.out.println("Informe o mês: ");
        mes = teclado.nextInt();
        
        if(mes>12 || mes<1){
            System.out.println("Opção inválida ! Apenas meses de 1-12 !");
            continue;
        }
            break;}
            catch (InputMismatchException e){
                System.out.println("Apenas números !");
                teclado.nextLine();
            }
        }
        while(true){
            try{
                System.out.println("Informe o dia: ");
        dia = teclado.nextInt();
        if(mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12){
            while(dia>31 || dia<1){
                System.out.println("Apenas dias maiores que 1 e menores ou iguais a 31 !");
                System.out.println("Novamente: ");
                dia = teclado.nextInt();
            }} else if (mes==4 || mes==6 || mes==9 || mes==11) {
                while(dia>30 || dia<1){
                    System.out.println("Apenas dias maiores que 1 e menores ou iguais a 30 !");
                    System.out.println("Novamente:");
                    dia = teclado.nextInt();
                }

        }else {
            while(dia>28 || dia<1){
            System.out.println("Fevereiro ! Apenas maiores que 1 e menores ou iguais a 28! ");
                System.out.println("Novamente:");
                dia = teclado.nextInt();
            }
        }
        break;}

            catch (InputMismatchException e){
                System.out.println("Apenas números !");
                teclado.nextLine();
            }
        }
        LocalDate dataComp = LocalDate.of(ano, mes, dia);

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/YYYY");
        String dataformatada = String.valueOf(dataComp.format(formatter));

        System.out.println(dataformatada);
        System.out.println("Quantos meses vai adicionar?");
        newmonths = teclado.nextInt();

        LocalDate mesadd = dataComp.plusMonths(newmonths);
        String mesformatado = String.valueOf(mesadd.format(formatter));
        System.out.println(mesformatado);
    }
}
1 resposta

Olá, Guilherme! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o LocalDate para manipular datas com Java, utilizou muito bem o DateTimeFormatter para formatar a saída e ainda compreendeu a importância da tratamento de exceções para garantir que o programa funcione mesmo com entradas inválidas.

Uma dica interessante para o futuro é aplicar o método isLeapYear() para validar corretamente os dias de fevereiro em anos bissextos. Assim:

import java.time.LocalDate;

public class TesteAnoBissexto {
    public static void main(String[] args) {
        int ano = 2024;
        if (LocalDate.of(ano, 1, 1).isLeapYear()) {
            System.out.println(ano + " é bissexto, fevereiro terá 29 dias.");
        } else {
            System.out.println(ano + " não é bissexto, fevereiro terá 28 dias.");
        }
    }
}

Isso faz com que a verificação de datas seja ainda mais precisa.

Conteúdos relacionados

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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