Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Java (http://www.forosdelweb.com/f45/)
-   -   Tonteria (http://www.forosdelweb.com/f45/tonteria-598990/)

Chemita 22/06/2008 10:03

Tonteria
 
Hola:

Estoy intentando cifrar un texto con un simple desplazamiento de las posiciones de los caracteres.

Para esto tengo un Vector con lo caracteres que se pueden usar, y un StringBuffer que almacena el resultado de ese desplazamiento.

Código PHP:

        StringBuffer sb = new StringBuffer();
        
Vector<Character= new Vector<Character>();
        for(
int i=0;i<256;i++){
            
v.add((char)i);
        }
        
char [] str.toCharArray();
        for(
int i=0;i<c.length;i++){
--->        
sb.append(v.get(v.indexOf((Character)c[i]+semilla)));
        } 

Bueno quisiera saber porque me lanza Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1

venkman 22/06/2008 11:36

Respuesta: Tonteria
 
Tienes dos problemas: uno de paréntesis y otro de índices:

1. Lo que estás haciendo es buscar en v la posición de (c[i] +semilla), cuando lo que deberías hacer es buscar la posición de c[i] y luego desplazarlo semilla:
En lugar de v.indexOf((Character)c[i]+semilla)
Esto v.indexOf((Character)c[i])+semilla

2. Estás sumando semilla, pero realmente esto te va a llevar en ocasiones fuera del Vector. Tienes que hacer que cuando se pase vuelva al inicio.

El bucle quedaría así:
Código:

for(int i=0;i<c.length;i++){
    int posicion = v.indexOf((Character)c[i]); // Busca la posición inicial
    posicion += semilla; // Desplazamos semilla
    posicion = posicion%v.size; // aplicamos módulo del tamaño de v.
    sb.append(v.get(posicion));
}


Chemita 22/06/2008 12:22

Respuesta: Tonteria
 
Hola:

Muchas gracias por todo. Lo hice como me dijiste y funciona 100%.


La zona horaria es GMT -6. Ahora son las 22:26.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.