Dudas de Programacion » Java » Java Básico

JAVA - Algoritmo de Polybios - no entra en un "if"

(4 posts)
  • Started 4 months ago by lopera607
  • Latest reply from lopera607
  1. lopera607
    Member

    Buenas y ante todo gracias a todos, mi duda es que en el metodo "Encriptar" no me entra al "if", y compruebo las variables String "cadenaAbecedario" y "cadenaFrase" y contienen los datos correctos pero no se por que no entra en la conficion "if", y si la comento, me ejecuta el codigo que contiene if, y le mete al array "resultado", la ultima posición "44" del "ArrayAbecedario", concatena fila y columna.

     
    import java.util.Scanner;
     
    public class polybios1 {
     
    	private static final String LeerMatriz = null;
    	static String Frase = "";
    	static String ArrayAbecedario[][]={
    	         {"a","b","c","d","e"},
    	         {"f","g","h","i","k"},
    	         {"l","m","n","o","p"},
    	         {"q","r","s","t","u"},
    	         {"v","w","x","y","z"}
    	            }; 
     
    	public static void main(String[] args) {
     
    	//Solicitamos frase para cifrar
    	solicitaFrase();
    	String FraseParaCifrar[];
    	FraseParaCifrar = new String [Frase.length()];
    	RellenaMatriz(FraseParaCifrar, Frase);
        MostrarFraseParaCifrar(FraseParaCifrar);
        Encriptar(FraseParaCifrar, ArrayAbecedario);
    	}
     
    	private static void Encriptar(String[] fraseParaCifrar, String[][] ArrayAbecedario) {
     
    		String resultado[];
    		for (int o = 0;o < fraseParaCifrar.length; o++){
     
    			System.out.print(fraseParaCifrar[o]+"-");
    		}
    		resultado = new String [fraseParaCifrar.length];
    		int fila = 0;
    		int columna = 0;
    		for (fila = 0; fila <= 4; fila++){
    			for (columna = 0; columna <= 4; columna++){
    				//System.out.print(ArrayAbecedario[fila][columna]);
    				String cadenaAbecedario = "";
    				cadenaAbecedario = ArrayAbecedario[fila][columna];
     
    				for (int o = 0;o < fraseParaCifrar.length; o++){
    					//System.out.println(fila+""+columna);
    					//System.out.println(fraseParaCifrar[1]);
    			    String cadenaFrase = fraseParaCifrar[o];
    			    System.out.println(fraseParaCifrar[0]);
    				if (cadenaAbecedario == cadenaFrase){
    					//System.out.println(fila+""+columna);
    					String filaString= String.valueOf(fila);
    					String columnaString= String.valueOf(columna);
    					String posicion = "";
    					posicion = filaString + columnaString;
    					resultado[o]= posicion;
     
    				}
    				}
    			}}
    			for(int y = 0; y < resultado.length;y++){
    				System.out.print(resultado[y]+"-");
    				//resultado[y] = resultado[y] *19*58*86*74 ;
    				//System.out.print(resultado[y]+",");
    			}
    			}
     
    	private static void MostrarFraseParaCifrar(String[] fraseParaCifrar) {
        for (int i = 0; i < Frase.length();i++ ){
        	//System.out.print(fraseParaCifrar[i]);
    }
     
    	}
     
    	private static void RellenaMatriz(String[] fraseParaCifrar, String frase) {
    for (int i = 0; i < frase.length();i++ ){
     
    			char letraChar = frase.charAt(i);
    			String letraString = Character.toString(letraChar);
    			fraseParaCifrar[i] = letraString;
    }
    	}
     
    	private static void solicitaFrase() {
    		Scanner sc = new Scanner(System.in);
            System.out.println("Introduce frase para cifrar solo letras: ");
            Frase = sc.nextLine();
     
    	}
     
    }
     
    Posted 4 months ago #


  2. lopera607
    Member

    RESUELTO

    Pongo el codigo que tenia erroneo, correjido.

     
    private static void Encriptar(String[] fraseParaCifrar, String[][] ArrayAbecedario) {
    		String resultado[];
    		for (int o = 0;o < fraseParaCifrar.length; o++){
    			//System.out.print(fraseParaCifrar[o]+"-");
    		}
    		resultado = new String [fraseParaCifrar.length];
    		int fila = 0;
    		int columna = 0;
    		for (fila = 0; fila <= 4; fila++){
    			for (columna = 0; columna <= 4; columna++)
    				//System.out.print(ArrayAbecedario[fila][columna]);
    				for (int o = 0;o < fraseParaCifrar.length; o++)
    					//System.out.println(fila+""+columna);
    					//System.out.println(fraseParaCifrar[1]);
    			    //System.out.println(fraseParaCifrar[0]);
    			    //System.out.println(cadenaAbecedario + " " + cadenaFrase);
    				if (fraseParaCifrar[o].equals(ArrayAbecedario[fila][columna])){
    					//System.out.println("es igual");
    					//System.out.println(fila+""+columna);
    					String filaString= String.valueOf(fila);
    					String columnaString= String.valueOf(columna);
    					String posicion = "";
    					posicion = filaString + columnaString;
    					resultado[o]= posicion;
    				}
    				}
    			}}
     
    Posted 4 months ago #
  3. @lopera607,

    Muchas gracias por compartir la resolución con nosotros.

    Posted 4 months ago #
  4. lopera607
    Member

    Buenas proporciono todo el codigo con sus comentarios:
    - Codificador.
    - Decodificador.

    public class polybios1 {

    private static final String LeerMatriz = null;
    static String Frase = "";
    static String ArrayAbecedario[][]={
    {"a","b","c","d","e"},
    {"f","g","h","i","k"},
    {"l","m","n","o","p"},
    {"q","r","s","t","u"},
    {"v","w","x","y","z"}
    };

    public static void main(String[] args) {

    //Solicitamos frase para cifrar
    solicitaFrase();
    //Creo un array con la longitud de la frase o palabra introducida
    String FraseParaCifrar[];
    FraseParaCifrar = new String [Frase.length()];
    //Relleno el array de FraseParaCifrar con la Frase introducida
    RellenaMatriz(FraseParaCifrar, Frase);
    //Esto es una prueba para comprobar que el array contiene la frase
    MostrarFraseParaCifrar(FraseParaCifrar);
    //Este metodo compara el array de abecedario y el de la Frase introducida
    //y da como resultado la posicion de la letra en el arrayAbecedario
    Encriptar(FraseParaCifrar, ArrayAbecedario);
    }
    private static void Encriptar(String[] fraseParaCifrar, String[][] ArrayAbecedario) {

    //Creo una variable que es la que almacena las posiciones
    String resultado[];
    resultado = new String [fraseParaCifrar.length];
    //creo dos variables aqui para poder utilizarlas en los 3 for
    int fila = 0;
    int columna = 0;
    //Recorro fila y columna con estos dos bucles del ArrayAbecedario
    for (fila = 0; fila <= 4; fila++){
    for (columna = 0; columna <= 4; columna++){
    //Recorro el array fraseParaCifrar
    for (int o = 0;o < fraseParaCifrar.length; o++){
    //Compruebo si son iguales
    if (fraseParaCifrar[o].equals(ArrayAbecedario[fila][columna])){
    //si son iguales pues me guarda en array Resultado las posiciones
    String filaString= String.valueOf(fila);
    String columnaString= String.valueOf(columna);
    String posicion = "";
    posicion = filaString + columnaString;
    resultado[o]= posicion;
    }
    }
    }
    }
    //mostrando resultado
    for(int y = 0; y < resultado.length;y++){
    System.out.print(resultado[y]);

    }
    }

    private static void MostrarFraseParaCifrar(String[] fraseParaCifrar) {
    //Esto es una prueba para comprobar el contenido del Array fraseParaCifrar
    for (int i = 0; i < Frase.length();i++ ){
    //System.out.println(fraseParaCifrar[i]);
    }

    }
    private static void RellenaMatriz(String[] fraseParaCifrar, String frase) {
    //Recorro la frase introducida letra por letra y voy introduciendola
    //en el array fraseParaCifrar
    for (int i = 0; i < frase.length();i++ ){
    char letraChar = frase.charAt(i);
    String letraString = Character.toString(letraChar);
    fraseParaCifrar[i] = letraString;
    }
    }
    private static void solicitaFrase() {
    //Solicito al usuario que introduzca la frase para codificarla
    Scanner sc = new Scanner(System.in);
    System.out.println("Introduce frase para cifrar solo letras y que no tengan espacios: ");
    Frase = sc.nextLine();

    }
    }

    _______________________________________________________________________________________


    public class Polybios_decodificador {

    static String ArrayAbecedario[][]={
    {"a","b","c","d","e"},
    {"f","g","h","i","k"},
    {"l","m","n","o","p"},
    {"q","r","s","t","u"},
    {"v","w","x","y","z"}
    };
    static String codificado = "12232000022321230432330032432301130422433334";
    public static void main(String[] args) {
    // Sacar el contenido del ArrayAbecedario con las posiciones que nos proporciona
    //la variable codificado
    //Creo dos variables para luego introducirlas como posiciones en el ArrayAbecedario
    int uno = 0;
    int dos = 0;
    //Recorro todas las letras de la variable codificado
    for (int i = 0;i < codificado.length();i++){
    //Si es par la posicion en la variable se guarda como entero en la variable uno
    if (i%2 == 0){
    char letraPar = codificado.charAt(i);
    char c = letraPar;
    uno = c - 48;//48 es el 0 en ASCII
    }
    //Y si no es par, es impar la posicion pues lo mete el valor en dos
    else {
    char letraImpar = codificado.charAt(i);
    char c = letraImpar;
    dos = c - 48;//48 es el 0 en ASCII
    //Solo muestro cuando llegamos a una posicion de la variable impar
    System.out.print(ArrayAbecedario[uno][dos]);
    }

    }
    }

    }

    Posted 4 months ago #



Reply

You must log in to post.

1,070 posts in 437 topics over 40 months by 388 of 892 members. Latest: lalala, nijh1, jasu

Acerca de...

Dudas de Programación es una Web, dentro del proyecto aulambra.com que nace con la idea de propocionar un foro de consultas sobre diferentes temas de programación. Orientado a ayudar a los internautas hispano-hablantes en Internet.

Ir al Blog de Linea de Código

Otras Webs