Preciso montar uma lista de nomes possíveis. Por exemplo:
tenho um vetor { A, B } e um tamanho 3 gostaria um algoritmo que fizesse a combinação desses elementos para gerar a lista de palavras possíveis.
exemplo de saída:
A, AA, AAA, AB, AAB, B, BB, BBB, BA, BBA,BAB, ABA
Java tem alguma biblioteca que possa me ajudar a fazer isso sem ter que ficar trabalhando só com loops?
Mas, se isso for um exercício da faculdade, nem usar uma biblioteca pronta seria adequado.
bigodines
não é exercício de faculdade. vou procurar pra ver se eu acho alguma coisa no krugle, obrigado.
Luca
Olá
Sempre que você precisar mexer com qualquer coisa que tenha a ver com palavras verifique se o uso de expressões regulares pode ser adequado em algum trecho da solução.
[]s
Luca
S
schouery
Acho que o jeito mais fácil de fazer é com recursao.
publicstaticvoidmain(String[]args){// TODO remove static configurationschar[]values={'a','b'};System.out.println(values.length);intsize=3;// string sizeintstart=0;// for later use.WordListGeneratorwl=newWordListGenerator();wl.createTable(values,size,start);}
A saída está de acordo com o que eu esperava (yay!) mas como estou apenas brincando com o Java (este é um "exercício" que eu me propus pra aprender a linguagem) eu gostaria de saber se tem algum jeito de otimizar ou tornar o código melhor de acordo com os recursos da linguagem.
S
schouery
Que bom que você gostou da dica!
Acho que uma coisa que eu mudaria é utilizar StringBuffer ao invés de String, porque cada concatenação que vocês gera um novo objeto String, já que Strings são estáticas em Java.
O StringBuffer iria se alterar ao invés de criar um novo objeto.
Então, o problema é que ele não tá apagando o StringBuffer, então vc precisa colocar na ultima linha do for algo do tipo: str.deleteCharAt(str.length()-1)
mas dai dá pra melhorar, arrancar esse .length() e usar o step.
só não coloquei aqui porque não sei se ele começa no zero ou não.