10  Chatbot no Console

10.1 Objetivo da aula

Agora vamos juntar o que aprendemos e montar um chatbot funcional no terminal. Nesta atividade, o foco é transformar conceitos isolados em uma aplicação completa, simples e útil. Você vai praticar entrada de dados, estruturas condicionais, laços de repetição e organização em classes. No final, terá um programa interativo que responde comandos e mantém um pequeno histórico da conversa.

10.2 Estrutura sugerida

  • Classe Chatbot
  • Método responder
  • Loop com Scanner
  • Histórico com ArrayList

Essa estrutura separa bem as responsabilidades do programa. A classe Chatbot concentra as regras de resposta, enquanto a classe principal cuida da interação com o usuário. Com essa divisão, o código fica mais fácil de ler, testar e evoluir com novos comandos.

10.3 Código base

O exemplo abaixo já entrega um fluxo completo: inicia o bot, lê mensagens do usuário e responde até o comando de saída. Leia com calma e observe como cada parte se conecta com o conteúdo estudado nos capítulos anteriores.

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

class Chatbot {
    private final String nome;
    private final ArrayList<String> historico = new ArrayList<>();

    public Chatbot(String nome) {
        this.nome = nome;
    }

    public String responder(String msg) {
        historico.add(msg);
        if (msg.equalsIgnoreCase("oi")) return "Olá!";
        if (msg.equalsIgnoreCase("ajuda")) return "Comandos: oi, ajuda, historico, sair";
        if (msg.equalsIgnoreCase("historico")) return "Total: " + historico.size();
        return "Não entendi.";
    }

    public String getNome() {
        return nome;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Chatbot bot = new Chatbot("JavaBot");
        String msg = "";

        System.out.println("Bot " + bot.getNome() + " iniciado. Digite sair para encerrar.");

        while (!msg.equalsIgnoreCase("sair")) {
            System.out.print("Você: ");
            msg = sc.nextLine();
            if (!msg.equalsIgnoreCase("sair")) {
                System.out.println("Bot: " + bot.responder(msg));
            }
        }

        System.out.println("Bot: Até logo!");
        sc.close();
    }
}

Perceba que o método responder é o coração do chatbot. Ele recebe a mensagem, registra no histórico e decide o texto de retorno com base em comparações simples. Esse padrão é ótimo para começar e pode ser evoluído depois com regras mais avançadas.

Também vale notar o uso do laço while, que mantém a conversa ativa até o usuário digitar sair. Esse comportamento simula um chat real em modo texto e ajuda a treinar raciocínio de execução contínua.

Se quiser avançar, você pode padronizar entradas com trim() para remover espaços extras no começo e no fim da frase. Outra melhoria comum é tratar variações de escrita, como acentos e diferenças de maiúsculas e minúsculas.

DicaExercícios
  1. Adicione o comando hora.
  2. Adicione o comando nome.
  3. Salve o histórico em arquivo texto.
  4. Exiba uma mensagem de boas-vindas mais detalhada com exemplos de comandos disponíveis.
  5. Crie uma resposta padrão mais amigável para quando o bot não entender a mensagem.
  6. Mostre as últimas 3 mensagens do histórico em vez de apenas o total.
NotaExpansão didática complementar

Neste capítulo, o estudo de chatbot no console se torna realmente valioso quando você deixa de enxergar o conteúdo como uma lista de regras isoladas e passa a observar como cada decisão técnica influencia a qualidade do programa, a facilidade de manutenção e a capacidade de adaptar a solução sem quebrar o que já estava funcionando, especialmente em atividades progressivas que simulam situações de projeto real.

Para consolidar o aprendizado com profundidade, vale estruturar sua prática em uma sequência objetiva na qual você revisa o conceito principal, implementa um exemplo pequeno e legível e, logo em seguida, analisa de maneira crítica se houve melhoria concreta no fluxo conversacional, no estado da interação e na evolução incremental, porque esse ciclo consciente transforma estudo passivo em desenvolvimento de critério técnico.

Quando esse processo se repete ao longo das semanas, você começa a perceber que sua evolução não depende de decorar respostas prontas, mas sim de interpretar problemas com mais maturidade, justificar escolhas com argumentos claros e construir soluções cada vez mais consistentes, o que representa exatamente a transição de iniciante para praticante autônomo dentro da trilha de Java.