Foros del Web » Programación para mayores de 30 ;) » Java »

Tonteria

Estas en el tema de Tonteria en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 22/06/2008, 10:03
 
Fecha de Ingreso: febrero-2008
Mensajes: 27
Antigüedad: 16 años, 2 meses
Puntos: 1
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
  #2 (permalink)  
Antiguo 22/06/2008, 11:36
venkman
Invitado
 
Mensajes: n/a
Puntos:
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));
}
  #3 (permalink)  
Antiguo 22/06/2008, 12:22
 
Fecha de Ingreso: febrero-2008
Mensajes: 27
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Tonteria

Hola:

Muchas gracias por todo. Lo hice como me dijiste y funciona 100%.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




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