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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /// < 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); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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.
1 2 3 4 5 6 7 8 9 10 11 12 | // 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 :)