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!

1
resposta

Resolução

package com.github.lucasdevrj.exercicios.imprimindoresumodolivro;

public class Livro {
    String titulo;
    String autor;
    int paginas;

    public void exibeTitulo() {
        String informacoesDoTitulo = "\"%s\" de %s com %d páginas.".formatted(titulo, autor, paginas);
        System.out.println(informacoesDoTitulo);
    }
}
/**
 * Imagine que você está criando um sistema de catalogação para uma biblioteca. Seu objetivo é desenvolver
 * uma estrutura que armazene dados de obras literárias e as exiba em um formato padronizado, facilitando
 * a consulta por outros leitores.
 *
 * Crie um programa que:
 *
 * Defina uma classe com os atributos título, autor e páginas.
 * Implemente um método que use printf para mostrar os dados no formato: "[TÍTULO]" de [AUTOR] com
 * [PÁGINAS] páginas.
 *
 * Exemplo de entrada:
 * l.titulo = "O Guia do Mochileiro das Galáxias";
 * l.autor = "Douglas Adams";
 * l.paginas = 208;
 *
 * Saída esperada:
 * "O Guia do Mochileiro das Galáxias" de Douglas Adams com 208 páginas
 */

package com.github.lucasdevrj.exercicios.imprimindoresumodolivro;

import java.util.Scanner;

public class Principal {
    public static void main(String[] args) {
        Livro livro = new Livro();
        Scanner entrada = new Scanner(System.in);

        System.out.print("Digite o nome do livro: ");
        livro.titulo = entrada.nextLine();

        System.out.print("Digite o autor: ");
        livro.autor = entrada.nextLine();

        System.out.print("Digite o número de páginas: ");
        livro.paginas = entrada.nextInt();

        entrada.close();

        livro.exibeTitulo();
    }
}

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

1 resposta

Olá, Lucas. Como vai?

Mais uma excelente resolução de desafio! O seu código funcionou perfeitamente e a saída no console do IntelliJ ficou exatamente no padrão esperado. É muito bom ver que você continuou utilizando o Scanner para criar programas dinâmicos e que aplicou o método .formatted(), que deixa a concatenação de Strings muito elegante e limpa.

Como você compartilhou a sua solução para somar à comunidade, vou destacar alguns pontos técnicos super válidos e boas práticas voltadas ao design de código orientado a objetos:

1. Nomenclatura Coesa de Métodos

O método na sua classe foi nomeado como exibeTitulo(). Pensando na evolução do código, como esse método imprime o título, o autor e as páginas, o nome dele poderia refletir melhor o todo.

Uma alternativa muito utilizada no mercado seria exibirResumo() ou exibirInformacoes(). Escolher nomes que descrevam o comportamento exato ajuda muito na manutenção de sistemas grandes.

2. O Método Nativo toString()

No ecossistema Java, quando precisamos que uma classe consiga representar seus dados em formato de texto, a boa prática padrão é sobrescrever (override) um método nativo chamado toString().

Em vez de criar um método personalizado, você pode fazer isso:

@Override
public String toString() {
    return "\"%s\" de %s com %d páginas.".formatted(titulo, autor, paginas);
}

A grande vantagem é que, ao fazer isso, quando você quiser imprimir os dados do livro na sua classe Principal, basta passar o próprio objeto direto no System.out.println:

// O Java chama o método toString() automaticamente por debaixo dos panos
System.out.println(livro); 

3. Fechamento Seguro do Scanner

No seu código, você executou o entrada.close(); logo após ler os dados. Essa é uma prática excelente para evitar o vazamento de recursos de memória.

Apenas como uma dica para o futuro: quando o método entrada.close() é chamado, ele também fecha o fluxo de entrada do sistema (System.in). Se o seu programa tivesse outras partes que precisassem ler dados do teclado mais adiante, o Scanner não conseguiria mais operar. Por isso, a recomendação geral é fechar o Scanner apenas na última linha do método main, garantindo que nenhuma outra leitura seja interrompida antes da hora.

Parabéns pelo empenho contínuo nos exercícios práticos, os resultados estão ótimos!

Espero que possa ter lhe ajudado!