Função que gera string aleatória

Java

11/09/2011

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.
/// <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
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

Curtidas 0

Respostas

Marcelo Henrique

Marcelo Henrique

11/09/2011

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.
      // 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.
GOSTEI 0
Marcelo Henrique

Marcelo Henrique

11/09/2011

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
GOSTEI 0
POSTAR