Olá galera. Sou apenas um iniciante no estudo de Java e já estou com uma dúvida que não sei se vai ser tão simples de resolver. Será ótimo se eu estiver enganado
Seguinte, tô tendo que fazer uma árvore binária pra um trabalho da faculdade e tenho que ir alimentando ela com valores aleatórios para calcular o tempo de inserção. Só isso não é tão complicado. O problema é que os “valores” têm que ser alfanuméricos e não decimais.
Será que alguém tem alguma idéia pra me tirar dessa enrascada?
Vale lembrar que não interessa que tipo de String vai ficar… tipo, não precisa ser uma palavra mnemônica e até um “qw$*k!” tá valendo
Valeu pela atenção e, por favor, quem tiver qualquer idéia posta aí pq eu tô aceitando qq uma :okok:
cara, eu posso te dah umas dicas sobre o algoritmo, faz o seguinte…
faça uma string e depois usa a função Math.random() para escoher aleatoriamente assim
String letras = {“abcdz$&(@)(!asdasdg&1654687”};
int aleatorio;
//para gerar uma quantidade letras
for(int i = 1; i<=10; i++){
aleatorio = (int) (Math.random() * (letras.length() -1) ); //essa função gera
//os numeros aleatorio
System.out.print(letras[aleatorio]);
}
faz mais ou menos assim para gerar
eu ñ testei o codigo… falow… 8O
Cara, valeu mesmo pela idéia. Usei e gostei do resultado. Uma coisa que havia esquecido de falar era que os números aleatórios deveriam seguir uma distribuição gaussiana. No caso eu tiro um double através do método nextGauss() de java.util.Random e vou transformando numero por numero pelo representante do vetor letras[].
Meu código, pra quem estiver afim de brincar com essa pertubação, tá aí 8O
Claro que é bom estar ligado que por eu ser novo no negócio a gambiarra comeu solta hehehe. Gambiarra não… solução anti-patern :twisted:
public static String converte() { // retorna a string gerada
Random r = new Random(); // objeto para chamar nextGaussian()
String resultado = new String(); // obtem a string final e a retorna.
char letras[] = {'a','e','i','o','u','b','c','d','f','g'};
double d; // recebe o valor de nextGaussian()
int posicao;
while (( d = r.nextGaussian() ) < 0); // só sai quando for um valor positivo
/* valorStr recebe o nextGaussian() sem ponto numa string. Primeiro "converte" o
* double d para String e depois pega o q está "antes" e "depois" do ponto.
*/
StringTokenizer st = new StringTokenizer(String.valueOf(d),".");
String valorStr = st.nextToken().concat(st.nextToken());
/* posicao vai ter o i-ésimo caractere de valorStr em forma de inteiro. Essa
* variável indica o elemento do vetor letras[] que será concatenado a resultado
* */
for(int i = 0; i < valorStr.length(); i++){
posicao = Integer.parseInt(valorStr.substring(i,i+1));
resultado = resultado.concat(String.valueOf(letras[posicao]));
}
return resultado;
} // fim do método converte()
PS: Qualquer sugestão, sou todo ouvidos
[ ],
[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - Matheus [/color][/size] :joia: