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

Solução - Cadastro de livros

Utilizando Switch Expression

package variaveisetipos;
import java.util.Scanner;

public class CadastroDeLivros {
    public static void main(String[] args) {
        String titulo;
        String autor;
        int paginas;
        double preco;
        char categoria;
        String categoriaLida = null;

        Scanner leitura = new Scanner(System.in);
        System.out.println("CADASTRO DE LIVROS");
        System.out.print("Título do Livro: ");
        titulo = leitura.nextLine();
        System.out.print("Autor: ");
        autor = leitura.nextLine();
        System.out.print("N° de Páginas: ");
        paginas = leitura.nextInt();
        System.out.print("Preço: ");
        preco = leitura.nextDouble();
        leitura.nextLine();
        boolean categoriaValida = false; 

        do {
        String menu = """
                Selecione a Categoria: 
                F - Ficção
                N - Não-ficção
                T - Tecnologia
                H - História
                """;
        System.out.println(menu);
        categoria = leitura.next().charAt(0);

       categoriaLida = switch (categoria) {
                case 'F', 'f' -> "Ficção";
                case 'N', 'n' -> "Não-ficção";
                case 'T', 't' -> "Tecnologia";
                case 'H', 'h' -> "História";
                default -> null; 
            };

            if (categoriaLida != null) {
                categoriaValida = true;
            } else {
                System.out.println("\nCategoria Inválida. Digite Novamente.\n");
            }

        } while (!categoriaValida);
        
        System.out.println("\n--- LIVRO CADASTRADO ---");
        System.out.println("Título: " + titulo);
        System.out.println("Autor: " + autor);
        System.out.println("Páginas: " + paginas);
        System.out.println("Preço: R$ " + preco);
        System.out.println("Categoria: " + categoriaLida);

        leitura.close();
    }
}
1 resposta

Olá, Estudante. Como vai?

Sua solução ficou excelente! O uso do laço do-while para validar a entrada do usuário garante que o sistema não avance com dados incorretos, o que é uma ótima prática de desenvolvimento de software.

O grande destaque do seu código foi a utilização da Switch Expression (com a sintaxe de seta ->), introduzida de forma definitiva nas versões modernas do Java. Ela deixa o código muito mais limpo, legível e seguro do que o switch-case tradicional, pois além de retornar um valor diretamente para a variável categoriaLida, ela elimina a necessidade de usar o comando break em cada caso, evitando o famoso erro de "fall-through" (quando o código executa os casos seguintes por esquecer o break).

Para agregar ainda mais valor ao seu aprendizado e trazer algumas boas práticas do ecossistema Java, deixo duas sugestões interessantes:

1. Limpeza do Buffer do Scanner
Notei que você utilizou corretamente o leitura.nextLine() logo após ler o preço (leitura.nextDouble()). Essa é uma excelente sacada para limpar o caractere de nova linha (\n) que fica "sobrando" no buffer do teclado, evitando que o próximo input seja pulado. Parabéns por atentar-se a esse detalhe técnico que costuma travar muitos iniciantes!

2. Isolamento do Menu no Loop
Dentro do seu laço do, a variável menu com o bloco de texto (Text Blocks """) é recriada na memória a cada repetição da tentativa inválida. Embora para um programa pequeno isso não mude o desempenho, uma boa prática de escrita de código é declarar constantes ou textos fixos fora do laço de repetição:

String menu = """
        Selecione a Categoria: 
        F - Ficção
        N - Não-ficção
        T - Tecnologia
        H - História
        """;

do {
    System.out.println(menu);
    categoria = leitura.next().charAt(0);
    // ... restante do seu bloco de validação

Seu código demonstra que você está estudando e aplicando recursos modernos do Java com muita propriedade. Continue com esse excelente hábito de testar diferentes estruturas e compartilhar suas soluções!

Espero que possa ter lhe ajudado!