1
resposta

[Sugestão] RESOLUÇÃO LISTA DE CONVIDADOS

import java.util.ArrayList;
import java.util.Scanner;

public class MainExercicioConvidados {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        ArrayList<String> convidados = new ArrayList<>();

        while (true) {
            System.out.println("Digite o nome do convidado (ou \'ver\' para visualizar a lista, \'sair\' para encerrar): ");
            String opcao = input.nextLine().trim().toLowerCase();

            if (opcao.equals("sair")) {
                System.out.println("Programa encerrado!");
                break;
            } else if (opcao.equals("ver")) {
                System.out.println("Lista de convidados:");
                if (convidados.isEmpty()) {
                    System.out.println("Nenhum convidado cadastrado!");
                } else {
                    for (String convidado : convidados) {
                        System.out.println("- " + convidado);
                    }
                }
            } else {
                if (convidados.contains(opcao)){
                    System.out.println("Este convidado já está na lista");
                } else {
                    convidados.add(opcao);
                    System.out.println("Convidado adicionado à lista!");
                }
            }
        }
        input.close();
    }
}
1 resposta

Olá, Cauan. Como vai?

Parabéns pela resolução do desafio! O seu código ficou excelente, muito bem estruturado e demonstra que você compreendeu perfeitamente o funcionamento do laço while, do controle de quebra com break e o uso do for-each para percorrer coleções em Java.

Destaco também duas ótimas práticas de programação defensiva que você aplicou logo no início da captura do texto:

  • O método .trim(), que remove espaços em branco desnecessários que o usuário possa digitar sem querer no começo ou no fim do nome.
  • O método .toLowerCase(), que padroniza a entrada em letras minúsculas. Isso evita falhas na validação caso o usuário digite "SAIR" ou "Ver" com letras maiúsculas.

Uma oportunidade de melhoria: Guardando o nome original

Ao aplicar o .toLowerCase() diretamente na variável opcao, você garantiu que as validações funcionassem perfeitamente. Porém, se o usuário cadastrar um convidado chamado "Ana Maria", o nome será salvo na sua ArrayList inteiramente em letras minúsculas: "ana maria". Na hora de exibir a lista (System.out.println("- " + convidado);), os nomes perderão a formatação com as letras maiúsculas originais.

Para agregar ainda mais valor ao seu projeto, uma boa prática é separar a variável de controle da variável de armazenamento. Veja como poderíamos ajustar esse trecho dentro do seu laço:

System.out.println("Digite o nome do convidado (ou 'ver' para visualizar a lista, 'sair' para encerrar): ");
String nomeDigitado = input.nextLine().trim(); // Mantém as maiúsculas originais
String comandoValidacao = nomeDigitado.toLowerCase(); // Usada apenas para os ifs

if (comandoValidacao.equals("sair")) {
    System.out.println("Programa encerrado!");
    break;
} else if (comandoValidacao.equals("ver")) {
    System.out.println("Lista de convidados:");
    if (convidados.isEmpty()) {
        System.out.println("Nenhum convidado cadastrado!");
    } else {
        for (String convidado : convidados) {
            System.out.println("- " + convidado); // Exibirá com as maiúsculas originais!
        }
    }
} else {
    // Para evitar nomes duplicados ignorando maiúsculas/minúsculas, podemos usar uma lógica de validação
    boolean jaExiste = false;
    for (String c : convidados) {
        if (c.equalsIgnoreCase(nomeDigitado)) {
            jaExiste = true;
            break;
        }
    }

    if (jaExiste) {
        System.out.println("Este convidado já está na lista");
    } else {
        convidados.add(nomeDigitado); // Adiciona o nome formatado corretamente
        System.out.println("Convidado adicionado à lista!");
    }
}

Dica de Ouro: Conhecendo o HashSet

Como o objetivo do seu código é gerenciar uma lista de convidados onde não podem existir nomes repetidos, o Java possui uma estrutura de dados nativa perfeita para esse cenário chamada HashSet.

Diferente do ArrayList, o HashSet não permite elementos duplicados por padrão. Se você tentar adicionar um elemento que já existe, ele simplesmente ignora e retorna false. Conhecer essas coleções vai te ajudar muito nos próximos passos com a linguagem!

A sua lógica está excelente e o código muito limpo. Continue praticando e compartilhando suas soluções aqui no fórum!

Espero que possa ter lhe ajudado!