Java - ¿En que falla mi codigo?

 
Vista:
sin imagen de perfil
Val: 51
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿En que falla mi codigo?

Publicado por mano13 (32 intervenciones) el 19/01/2017 13:10:33
Este es mi codigo en el que se simula un sistema de cifrado/descifrado del Cesar. Primero se le pide al usuario introducir una frase y luego se le pide si quiere cifrarla o descifrarla. Mi problema es que cuando quiero descifrar la frase me salta un error. Lo de cifrar lo hace bien. Gracias.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package ccesar;
import java.util.Scanner;
public class ccesar {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int desplazamiento = 3;
        String frase1, frase2, palabra, cifrar, descifrar;
        frase2 = "";
        String min = "abcdefghijklmnñopqrstuvwxyz";
        String may = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
 
        System.out.print("Inserte la frase: ");
        frase1 = sc.nextLine();
 
        System.out.println("¿Cifrar o descifrar?: ");
        palabra = sc.nextLine();
 
    //Comprobar si se ha introducido cifrar o descifrar  
        if(palabra.equals("cifrar") || palabra.equals("descifrar")){
    //Inicio cifrar
        if(palabra.equals("cifrar") || palabra.equals("Cifrar")){
        for(int i = 0;i < frase1.length();i++){
            for(int j = 0;j < min.length();j++){
                if(frase1.charAt(i) == min.charAt(j)){
                    if(j + desplazamiento >= min.length()){
                        frase2 += min.charAt((j+desplazamiento)%min.length());
                    }else{
                        frase2 += min.charAt(j + desplazamiento);
                    }
                }
                else if(frase1.charAt(i) == may.charAt(j)){
                    if(frase1.charAt(i) == may.charAt(j)){
                    if(j + desplazamiento >= may.length()){
                        frase2 += may.charAt((j + desplazamiento)%may.length());
                    }else{
                        frase2 += may.charAt(j + desplazamiento);
                    }
                    }
                }
                }
            }
        }//Fin cifrar
    //Inicio descifrar
            if(palabra.equals("descifrar") || palabra.equals("Descifrar")){
            for(int i = 0;i < frase1.length();i++){
                for(int j = 0;j < min.length();j++){
                if(frase1.charAt(i) == min.charAt(j)){
                    if(j - desplazamiento >= min.length()){
                        frase2 += min.charAt((j - desplazamiento)%min.length());
                    }else{
                        frase2 += min.charAt(j - desplazamiento);
                    }
                }
                else if(frase1.charAt(i) == may.charAt(j)){
                    if(frase1.charAt(i) == may.charAt(j)){
                    if(j - desplazamiento >= may.length()){
                        frase2 += may.charAt((j - desplazamiento)%may.length());
                    }else{
                        frase2 += may.charAt(j - desplazamiento);
                    }
                    }
                }
                }
            }
            }//Fin descifrar
        }else{ //Si se produce un error al introducir "cifrar" o "descifrar"
            System.out.println("Palabra mal introducida. Introduzca cifrar o descifrar");
        }
        System.out.println("Frase introducida: " +frase1);
        System.out.println("Frase traducida: " +frase2);
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

¿En que falla mi codigo?

Publicado por ctmy (3 intervenciones) el 21/01/2017 07:47:08
Cual es el error? Algo me dice que es IndexOutOfBoundsException.

Pega el tipo de error que te sale
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 51
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿En que falla mi codigo?

Publicado por mano01 (32 intervenciones) el 21/01/2017 17:23:58
Me sale esto:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -3
at java.lang.String.charAt(String.java:658)
at cifrado.Cifrado.main(cifrado.java:53)
C:\Users\mano\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 12 seconds)

Creo que el problema está en la parte de descifrar del código, pero no sé dónde. Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar