entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

hola buen dia!, recurro a esto porque tengo la duda sobre como podria modidicar el metodo descifrarCesar (esto es para java) para poder hacer que me devuelva un listado de todas las palabras descifradas posibles, mi idea es poner un while y que dentro de este se quede el for, el while lo que me regresaria seria el parametro desplazamiento++, pero no encuentro la forma de que esto quede bien, disculpen estoy empezando y me confundo un poco con las estructuras de while y for, lo que quiero que haga el programa solo es que me de las 28 opciones posibles y despues que me de la opcion correcta descifrada, el programa completo es este:


public class CifradoCesar {

public static String alfabetoCesar = "abcdefghijklmnñopqrstuvwxyz ";

 public static String cifrarCesar(String cadena, int desplazamiento){

      String cesar="";//Cadena con el mensaje encriptado
      for(int i = 0; i<cadena.length();i++){//Por cada caracter de la cadena original
          int nuevaPosicion = (alfabetoCesar.indexOf(cadena.charAt(i)) + desplazamiento) % alfabetoCesar.length();   //Posicion x + n mod 27
          cesar = cesar + alfabetoCesar.charAt(nuevaPosicion);     //Concatena texto cifrado
      }
      return cesar;
  }

_public static String descifrarCesar(String cesar, int desplazamiento){
     String cadenaDescifrada="";
        for(int i = 0; i<cesar.length();i++){                    //el desplazamiento no debe ser mayor al tamaño de caracteres
                int nuevaPosicion = (alfabetoCesar.indexOf(cesar.charAt(i))+alfabetoCesar.length()-(desplazamiento%alfabetoCesar.length()))%alfabetoCesar.length();       //Posicion x - n mod 27
                cadenaDescifrada+=alfabetoCesar.charAt(nuevaPosicion);       //Concatena texto descifrado
        }
        return cadenaDescifrada;_

public static void main(String[] args) {
String cifrado =  "ldqcfdlcvdkfqgrirqvbqhlvqtfcvkzfqldqtizcvdqtfdqkfurjqbrjquvqbrqbvo";
        System.out.println("Cifrado: " + cifrado);
        System.out.println("Descifrado: "+ descifrarCesar(cifrado,0));

    }

}

y lo que quiero hacer con el metodo descifrarCesar es esto

while(desplazamiento <=cifrado.length()){
         aqui todo el for que se encuentra en ese metodo
         desplazamiento++;
     }

pero me da error.
o alguien me podria dar otra sugerencia para modificar ese metodo y me regrese las 28 posibles respuestas????, es que no se me ocurre otra cosa.
NOTA: solo puedo modificar ese método.

3votos

carlossevi comentado

Dos observaciones:

  1. El código no lo has formateado correctamente y no se ve bien, es un cachondeo intentar leerlo entre cursivas, texto normal, bloques de código, líneas divisoras...

  2. Por el enunciado, parece que es un ejercicio de unas prácticas o algo así ¿Correcto?

2votos

Leonardo-Tadei comentado

Si Java te da un error, copiá y pegá el error que obtenés así podemos ayudarte mejor.

Por otra parte, por más que pongas en un bucle todo el alfabeto y lo vayas desplazando, tendrás que comparar las salidas con un diccionario o algo, para que se pueda determinar si obtuviste un descifrado correcto.

Por último, tu algoritmo es para descifrar Cesar asume que el alfabeto de sustitución está ordenado, lo cual no tiene por qué ser así...

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta