Este projeto é uma aplicação Java simples que gera todos os anagramas possíveis de uma palavra fornecida pelo usuário. O programa lê uma palavra, valida sua entrada para garantir que contenha apenas letras, e então calcula e imprime todos os anagramas possíveis, sem repetições.
A geração de anagramas é feita através de uma técnica recursiva chamada backtracking, que constrói permutações de caracteres passo a passo.
Dada uma string de entrada, o algoritmo:
-
Mantém uma
prefixque representa a parte já construída da permutação. -
Mantém um
remainingque contém os caracteres ainda não usados. -
Se
remainingestiver vazio, a permutação está completa e adiciona oprefixao conjunto de resultados. -
Caso contrário, para cada caractere em
remaining:- Remove o caractere da posição atual.
- Chama recursivamente a função com o
prefixacrescido deste caractere e oremainingatualizado.
-
Como o resultado é armazenado em um
Set, evita anagramas duplicados automaticamente.
-
TextProcessor: Classe principal que contém a lógica para gerar anagramas (
generateAnagramse método auxiliar recursivogeneratePermutations), além do métodomainpara interação com o usuário. -
InputValidator: Classe responsável por validar a entrada do usuário, garantindo que ela não seja nula, vazia ou contenha caracteres inválidos.
-
InvalidInputException: Exceção personalizada para sinalizar entradas inválidas.
Cada classe tem uma responsabilidade clara: validação de entrada, geração de anagramas e interface com o usuário. Isso facilita manutenção e extensibilidade.
O código trata exceções específicas (InvalidInputException) e também possui um bloco catch genérico para evitar falhas inesperadas, garantindo maior robustez.
A utilização de HashSet garante que anagramas repetidos não sejam adicionados ao resultado, evitando trabalho desnecessário.
Nomes de métodos e variáveis são claros (generateAnagrams, generatePermutations, prefix, remaining), tornando o código fácil de entender sem necessidade de comentários excessivos.
A geração dos anagramas está dividida em um método público (generateAnagrams) e um método privado recursivo (generatePermutations), seguindo o princípio de decomposição funcional.
Antes de processar a entrada, o código valida os dados recebidos para evitar processamento desnecessário e erros posteriores.
Embora o projeto seja simples e não use frameworks, alguns padrões básicos podem ser reconhecidos:
-
Template Method (parcialmente): A separação entre validação e geração dos anagramas pode ser vista como etapas de um template para processamento de entrada.
-
Defensive Programming: Validar entrada e tratar exceções previne comportamentos errôneos.
-
Imutabilidade em recursão: Em
generatePermutations,prefixeremainingsão tratados como novos objetos em cada chamada, evitando efeitos colaterais.
- Compile as classes:
javac src/*.java- Execute a aplicação:
java src.TextProcessor-
Insira uma palavra contendo apenas letras quando solicitado.
-
O programa exibirá todos os anagramas possíveis e o total encontrado.
- Adicionar suporte para palavras com caracteres repetidos sem gerar permutações duplicadas (otimização do algoritmo).
- Implementar interface gráfica.
- Permitir entrada com caracteres acentuados.
- Transformar o gerador de anagramas em uma biblioteca reutilizável com testes unitários mais robustos.