Hola pamiques, estoy sacando DAM a distancia en mis ratos libres y me he atascado en un problemilla con arrays en JAVA.
Básicamente necesito codificar un texto en cifrado Cesar (codificado por desplazamiento de caracteres) y luego volverlo a decodificar. La parte del codificado (aunque seguramente con código muy rudimentario) va bien, he solventado el posible OutOfBounds tirando del resto y de la función length.
Sé (o eso he visto por ahí) que hay formas mejores y más sencillas de hacerlo, pero el profesor exige que se no se emplee nada que él no haya utilizado o explicado (ejem) en clase (que vienen a ser métodos de la clase String). El problema viene al hacer la inversa, al recorrer el array en sentido negativo, no sé cómo evitar el OutOfBounds (y continuar al final del array) cuando los índices sobrepasan la primera posición. Tengo esto hecho para la decodificación, pero evidentemente no funciona cuando j<code.Código:Scanner sc= new Scanner(System.in); String lower = "abcdefghijklmnopqrstuvwxyz "; String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ "; String text1, text2, text3; int code; text2 = ""; text3 = ""; System.out.println("Ingresa la frase a codificar"); text1 = sc.nextLine(); do{ System.out.print("Ingresa el número de clave para codificar [0-26]: "); code = sc.nextInt(); }while(code<0 || code>26); for (int i = 0; i < text1.length(); i++) { for (int j = 0; j < lower.length(); j++) { if (text1.charAt(i) == lower.charAt(j)) { if (j + code >= lower.length()) { text2 += lower.charAt((j + code) % lower.length()); } else { text2 += lower.charAt(j + code); } }else if (text1.charAt(i) == upper.charAt(j)) { if (j + code >= upper.length()) { text2 += upper.charAt((j + code) % upper.length()); } else { text2 += upper.charAt(j + code); } } } } System.out.println(text2);
Jrasias por halludar ha heste provre nub, mis dies.Código://DECODIFICAR do{ System.out.print("Ingresa el número de clave para decodificar [0-26]: "); code = sc.nextInt(); }while(code<0 || code>26); for (int i = 0; i < text2.length(); i++) { for (int j = 0; j < lower.length(); j++) { if (text2.charAt(i) == lower.charAt(j)) { //ETO NO VALE if (j - code >= lower.length()) { //ETO TAMPOCO text3 += lower.charAt((j - code) % lower.length()); } else { text3 += lower.charAt(j - code); } }else if (text2.charAt(i) == upper.charAt(j)) { //ETO NO VALE if (j - code >= upper.length()) { //ETO TAMPOCO text3 += upper.charAt(upper.length()- code); } else { text3 += upper.charAt(j - code); } } } } System.out.println(text3);
Marcadores