Problema con algoritmo encriptador y matriz

Iniciado por Debci, 22 Noviembre 2009, 12:11 PM

0 Miembros y 1 Visitante están viendo este tema.

Debci

Hola a todos, hoy estaba diseñando un algoritmo que cifra cadenas, cuando me dio un error extraño (puede que sea por mi autodidactia) que no soy capaz de resolver:


Código (java) [Seleccionar]
public void cifra() {
String cadenaIntroducida = new String("Debci");

cadenaIntroducida.toUpperCase();
char[] matrizCaracteres = cadenaIntroducida.toCharArray();
int numeroCaracteres = matrizCaracteres.length;
System.out.println("La cadena tiene " + numeroCaracteres +" caracteres." );
for(int i = 0; i < numeroCaracteres; i++){
    matrizCaracteres[i] = matrizCaracteres[i+1];
}
for(int x = 0; x < numeroCaracteres; x++){
    System.out.println(matrizCaracteres[x]);
}

}

La cosa, es que mi algoritmo hace lo siguiente, transforma todos los valores del array en el siguiente del indice, es decir, el valor que este en 0, sera transformado por el que este en 1, el de uno sera el 2, basicamente corre hacia un lado los indices.
Me da un error raro al ejecutar:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
        at encriptacion.Encriptador.cifra(Encriptador.java:23)
        at encriptacion.Encriptador.main(Encriptador.java:32)
La cadena tiene 5 caracteres.
Java Result: 1

A que se debe?

Saludos

Leyer

si tu metodo es ese donde  se queda el valor de 0 es decir si colocas "hola" daria esto "olaa" ?

Debci

Cita de: L-EYER en 22 Noviembre 2009, 19:46 PM
si tu metodo es ese donde  se queda el valor de 0 es decir si colocas "hola" daria esto "olaa" ?
si, mas bien es problema de planteamiento, ya que no se como hacer que se cambien de alguna manera que lo combierta ilegible.

Saludos

Blitzkrieg'

Cita de: ,.-~*´¨¯¨`*·~-.¸..::| D3Bć1 |::.,.-~*´¨¯¨`*·~-.¸ en 22 Noviembre 2009, 20:12 PM
Cita de: L-EYER en 22 Noviembre 2009, 19:46 PM
si tu metodo es ese donde  se queda el valor de 0 es decir si colocas "hola" daria esto "olaa" ?
si, mas bien es problema de planteamiento, ya que no se como hacer que se cambien de alguna manera que lo combierta ilegible.

Saludos

Si, porque tu metodo es muy facil de descifrar  ;D



Debci

Cita de: Sir Crapsalot en 22 Noviembre 2009, 22:10 PM
Cita de: ,.-~*´¨¯¨`*·~-.¸..::| D3Bć1 |::.,.-~*´¨¯¨`*·~-.¸ en 22 Noviembre 2009, 20:12 PM
Cita de: L-EYER en 22 Noviembre 2009, 19:46 PM
si tu metodo es ese donde  se queda el valor de 0 es decir si colocas "hola" daria esto "olaa" ?
si, mas bien es problema de planteamiento, ya que no se como hacer que se cambien de alguna manera que lo combierta ilegible.

Saludos

Si, porque tu metodo es muy facil de descifrar  ;D
La cosa esta en que no me preccupa que sea facil o no, si no como lo puedo hacer para encriptarlo (por ejemplo) se me ocurrió que podia dividir la string en dos y girarlas y volver a juntarlas.

Pero sigue sin ser efectivo.

Saludos

-Ramc-

Para la pregunta que haces, el error dá por esta línea:
matrizCaracteres[i ] = matrizCaracteres[i+1];

Cuando i vale 4, está en la letra 'i' y le dices que en donde está la letra 'i' o sea matrizCaracteres[4], guarde la letra matrizCaracteres[i+1] es decir, matrizCaracteres[5] la cual no existe y por eso de lanza el error de desbordamiento del array.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

Debci

Cita de: -Ramc- en 23 Noviembre 2009, 18:52 PM
Para la pregunta que haces, el error dá por esta línea:
matrizCaracteres[i ] = matrizCaracteres[i+1];

Cuando i vale 4, está en la letra 'i' y le dices que en donde está la letra 'i' o sea matrizCaracteres[4], guarde la letra matrizCaracteres[i+1] es decir, matrizCaracteres[5] la cual no existe y por eso de lanza el error de desbordamiento del array.
la cosa es que no se me ocurre como estabilizar esa situacion, ya se que el error ocurre porque intento leer un indice que no existe, pero como se podria hacer para que lea solamente hasta el ultimo?

Saludos

-Ramc-

Pues poniendole que lea sólamente hasta el último, si pones:

for(int i = 0; i < numeroCaracteres-1; i++)
Te queda ebcii, por ejemplo.

Puedes hacer que el último sea el primero también, y así por lo menos tienes la cadena completa para posibles algoritmos reversibles, etc. Todo depende de lo que necesites.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.