Segue minha resolução! Acho que está um pouco diferente do solicitado, mas funciona bem.
- Classe Pedido que contém as informações relacionadas ao livro alugado:
package br.com.exercicios.alura;
import java.text.NumberFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Pedido {
String livro;
LocalDate dataRetirada;
LocalDate dataEntrega;
Long diasAtraso;
double multaAtraso;
public static final DateTimeFormatter FORMATTER =
DateTimeFormatter.ofPattern("dd/MM/yyyy");
public String getLivro() {
return livro;
}
public void setLivro(String livro) {
this.livro = livro;
}
public String getDataRetirada() {
return dataRetirada.format(FORMATTER);
}
public void setDataRetirada(LocalDate dataRetirada) {
this.dataRetirada = dataRetirada;
}
public String getDataEntrega() {
return dataEntrega.format(FORMATTER);
}
public void setDataEntrega(LocalDate dataEntrega) {
if (dataEntrega.isBefore(this.dataRetirada)){
throw new IllegalArgumentException("Data de entrega não pode ser anterior a data de retirada!");
}
this.dataEntrega = dataEntrega;
}
public Long getDiasAtraso() {
return diasAtraso;
}
public void setDiasAtraso(Long diasAtraso) {
this.diasAtraso = diasAtraso;
}
public String getValorFormatado() {
NumberFormat nf = NumberFormat.getInstance(new Locale("pt", "BR"));
nf.setMinimumFractionDigits(2);
nf.setMaximumFractionDigits(2);
return nf.format(multaAtraso);
}
@Override
public String toString () {
return "livro: " + livro + "|" +
"Data da retirada: " + dataRetirada.format(FORMATTER) +
"| data da entrega: " + dataEntrega.format(FORMATTER) +
"| dias em atraso: " + diasAtraso +
"| Multa por atraso: R$ " + getValorFormatado();
}
}
- Main para rodar a aplicação:
package br.com.exercicios.alura;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Scanner;
public class Main {
public static final long PRAZO_DEVOLUCAO = 7;
public static final DateTimeFormatter FORMATTER =
DateTimeFormatter.ofPattern("dd/MM/yyyy");
public static final double MULTA = 2.50;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Pedido livro =new Pedido();
livro.livro = "Dom Casmurro";
livro.dataRetirada = LocalDate.parse("22/03/2026", FORMATTER);
while (true){
System.out.println("Digite a data de devolução: ");
livro.dataEntrega = LocalDate.parse(sc.next(), FORMATTER);
if(!livro.dataEntrega.isBefore(livro.dataRetirada)){
break;
} else {
System.out.println("Data de entrega não pode ser anterior a data de retirada.");
}
livro.getDataEntrega();
}
long diasAluguel = ChronoUnit.DAYS.between(livro.dataRetirada, livro.dataEntrega);
if(diasAluguel > PRAZO_DEVOLUCAO){
livro.diasAtraso = diasAluguel - PRAZO_DEVOLUCAO;
livro.multaAtraso = MULTA * livro.diasAtraso;
System.out.println(livro);
} else {
System.out.printf("Entrega em dia!\n" + livro);
}
}
}