Buenas proporciono todo el codigo con sus comentarios:
- Codificador.
- Decodificador.
<code>
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();
}
}
</code>
_______________________________________________________________________________________
<code>
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]);
}
}
}
}
</code>