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.
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);
        }
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
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);
        }
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)
Livio Bruno

Livio Bruno

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.
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 );
Espero ter ajudado.
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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar