Fórum Função que gera string aleatória #568082
11/09/2011
0
Bom dia pessoal, estou com um pequeno probleminha em uma função para gerar string aleatória em java. Fiz esta mesma função em C# e ao tentar implementa-la em java esta dando erro.
O problema está no random, pelo que vi em java o metodo random deve receber somente um parâmetro algo do tipo random.nextInt(int), porém quando alterei o codigo deu pala. Poderiam me ajudar??? Segue abaixo o codigo em JAVA
O ERRO É ESTE:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -13
at java.lang.String.substring(Unknown Source)
at GeradorDeStrings.geraStringAleatoria(GeradorDeStrings.java:40)
at GeradorDeStrings.main(GeradorDeStrings.java:55)
/// <summary>
/// Gera uma string aleatória de 3 caracteres presentes na string letras criada dentro do
/// método. CODIGO C#
/// </summary>
public static void geraStringAleatoria()
{
// Determia as letras que poderão estar presente nas chaves
string letras = "ABCDEFGHIJKLMNOPQRSTUVYWXZ";
Random random = new Random();
for (int i = 0; i < 3; i++)
{
armazenaChaves = letras.Substring(random.nextInt(1, 26), 1) + letras.Substring(random.nextInt(1, 26), 1) +
letras.Substring(random.nextInt(1, 26), 1);
}
// Chamada da função que determinará o indice em que a chave gerada deverá ser colocada
funcaoHash(armazenaChaves);
}public static void geraStringAleatoria()
{
// Determia as letras que poderão estar presente nas chaves
String letras = "ABCDEFGHIJKLMNOPQRSTUVYWXZ";
Random random = new Random();
for (int i = 0; i < 3; i++)
{
armazenaChaves = letras.substring(random.nextInt(26), 1) + letras.substring(random.nextInt(26), 1) +
letras.substring(random.nextInt(26), 1);
}
// Chamada da função que determinará o indice em que a chave gerada deverá ser colocada
funcaoHash(armazenaChaves);
}Livio Bruno
Curtir tópico
+ 0
Responder
Posts
11/09/2011
Marcelo Henrique
Seguinte a utilização do método substring está errada. Você está passando dois parâmetro, o primeiro é o índice inicial e o segundo o índice final, como você está passando sempre 1 como índice final exceto nos casos onde o índice inicial seja 0 sempre vai dar essa exceção porque você está tentando pegar a substring do a posição 7 a posição 1 o que não é possível com esse método.
Algumas sugestões, use o letras.length() como parametro do nextInt dessa forma se o seu alfabeto crescer o código já estará adaptado. Não seria mais interessante o loop for conter 9 iterações em vez de 3 iterações com 3 chamadas a letras.substring(random.nextInt(26), 1)?
Seguem as alterações que eu fiz pra funcionar.
Espero ter ajudado.
// Determia as letras que poderão estar presente nas chaves
String letras = "ABCDEFGHIJKLMNOPQRSTUVYWXZ";
Random random = new Random();
String armazenaChaves = "";
int index = -1;
for( int i = 0; i < 9; i++ ) {
index = random.nextInt( letras.length() );
armazenaChaves += letras.substring( index, index + 1 );
}
System.out.println( armazenaChaves );
Responder
Gostei + 0
11/09/2011
Marcelo Henrique
Realmente funcionou, agora entendi o porque do erro ao usar a Substring, java e C# são tão parecidos mais existem algumas particularidades que devemos levar em consideração.
Agradeço a ajuda
Flow
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)