Foro sobre Java SE > Ayuda con una conversion
Que te parece algo así:
public static void main(String[] args) {
// Pide la cadena de texto al usuario
// String mensaje= JOptionPane.showInputDialog( null,
// "Ingrese el mensaje a encriptar: ","CRIPTOGRAFIA",JOptionPane.WARNING_MESSAGE);
String mensaje = "a b c g h i";
// Transforma a numero la cadena y aplica operaciones a los numeros
String cad = mensaje.toLowerCase();
ArrayList<Integer> t = new ArrayList<Integer>();
String g = "";
for (int i = 0; i < cad.length(); ++i) {
char ch = cad.charAt(i);
if (!t.isEmpty()) {
// t.add();
}
int n = (int) ch - (int) 'a' + 1;
if (n == -64) {
n = 0;
}
n = (int) Math.pow(n, 5);
n = (int) n % 29;
t.add(n);
}
// Este fue mi intento para volver a tranformar a letras, pero no
// corrio:
// String cadnum = t.toLowerCase();
//
// for (int m = 0; m < cadnum.length(); ++m) {
// char ch2 = cadnum.charAt(m);
//
// if (ch2 == 1) {
// ch2 = 'A';
// }
// if (ch2 == 15) {
// ch2 = 'O';
// }
// if (ch2 == 2) {
// ch2 = 'B';
// }
// if (ch2 == 16) {
// ch2 = 'P';
// }
// if (ch2 == 3) {
// ch2 = 'C';
// }
// if (ch2 == 17) {
// ch2 = 'Q';
// }
// if (ch2 == 4) {
// ch2 = 'D';
// }
// if (ch2 == 18) {
// ch2 = 'R';
// }
// if (ch2 == 5) {
// ch2 = 'E';
// }
// if (ch2 == 19) {
// ch2 = 'S';
// }
// if (ch2 == 6) {
// ch2 = 'F';
// }
// if (ch2 == 20) {
// ch2 = 'T';
// }
// if (ch2 == 7) {
// ch2 = 'G';
// }
// if (ch2 == 21) {
// ch2 = 'U';
// }
// if (ch2 == 8) {
// ch2 = 'H';
// }
// if (ch2 == 22) {
// ch2 = 'V';
// }
// if (ch2 == 9) {
// ch2 = 'I';
// }
// if (ch2 == 23) {
// ch2 = 'W';
// }
// if (ch2 == 10) {
// ch2 = 'J';
// }
// if (ch2 == 24) {
// ch2 = 'X';
// }
// if (ch2 == 11) {
// ch2 = 'K';
// }
// if (ch2 == 25) {
// ch2 = 'Y';
// }
// if (ch2 == 12) {
// ch2 = 'L';
// }
// if (ch2 == 26) {
// ch2 = 'Z';
// }
// if (ch2 == 13) {
// ch2 = 'M';
// }
// if (ch2 == 14) {
// ch2 = 'N';
// }
// char n2 = (char) ch2;
char[] valores = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z' };
for (Integer n : t) {
if (n<27)
g += " " + valores[n + 1];
}
// Aki debe mostrar el texto en letras ya remplazado
System.out.println("El mensaje encriptado es:" + g);
}
Sorry, es un poco lioso, aquí lo mismo con alguna modificación y comentarios
public static void main(String[] args) {
// Pide la cadena de texto al usuario
// String mensaje= JOptionPane.showInputDialog( null,
// "Ingrese el mensaje a encriptar: ","CRIPTOGRAFIA",JOptionPane.WARNING_MESSAGE);
String mensaje = "a b c g h i";
// Transforma a numero la cadena y aplica operaciones a los numeros
String cad = mensaje.toLowerCase();
//creamos un ArrayList que parece ser mas efectivo en este caso
ArrayList<Integer> t = new ArrayList<Integer>();
String g = "";
for (int i = 0; i < cad.length(); ++i) {
char ch = cad.charAt(i);
// ? ? ?
//if (!t.isEmpty()) {
// t.add();
//}
int n = (int) ch - (int) 'a' + 1;
//solo trabajamos si esta dentro de nuestro rango de valores permitidos
if (n != -64) {
n = (int) Math.pow(n, 5);
n = (int) n % 29;
t.add(n);
}
}
// creamos un array de char del alfabeto ordenado
char[] valores = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z' };
// por cada valor de t añadimos a g su caracter correspondiente
for (Integer n : t) {
if (n < 27)
g += " " + valores[n - 1];
}
// Aki debe mostrar el texto en letras ya remplazado
System.out.println("El mensaje encriptado es:" + g + " - "
+ t.toString());
}
Andete, primero que todo, muchas gracias por ayudarme, pues el programa funciona muy bien, pero me gustaría poder agregar un pequeño detalle, mira te lo cuento:
Si el usuario ingresa (espacio), a lo que tranforma a numeros, seria (-64), este debe mostrarse como (0), esto ya lo he hecho en el codigo, en una sentencia if, pero despues de realizar las operaciones, en mi programa no afecta a 0 , pues elevo a potencia, entonces al volver asignar letras, el (0) desearia que se vuelva a asignar un (espacio), mira te dejo elcodigo de nuevo con la convercion de -64 a 0, y lo demas, espero puedas ayudarme:
String mensaje = "a b c g h i";
String cad = mensaje.toLowerCase();
ArrayList<Integer> t = new ArrayList<Integer>();
String g = "";
for (int i = 0; i < cad.length(); ++i) {
char ch = cad.charAt(i);
int n = (int) ch - (int) 'a' + 1;
if (n == -64)
{n = 0;}
if (n != -64) {
n = (int) Math.pow(n, 5);
n = (int) n % 29;
}
t.add(n);
}
// creamos un array de char del alfabeto ordenado
char[] valores = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z' };
// por cada valor de t añadimos a g su caracter correspondiente
for (Integer n : t) {
if (n < 27&&n!=0)
g += " " + valores[n - 1];
}
System.out.println("El mensaje encriptado es:" + g + " - "
+ t.toString());
(((( Como puedes observar, ahora solo esta convirtiendo los numeros q no sean ceros, lo q necesito es q si es 0, le asigne un espacio))) de antemano gracias
No se si te refieres a esto: en el ultimo for, cuando editas la cadena 'g' simplemente pregunto si es 0, si es así insertas espacio, de lo contrario pongo el carácter correspondiente.
String mensaje = "a b c g h i";
String cad = mensaje.toLowerCase();ArrayList<Integer> t = new ArrayList<Integer>();
String g = "";for (int i = 0; i < cad.length(); ++i) {
char ch = cad.charAt(i);int n = (int) ch - (int) 'a' + 1;
if (n == -64) {
n = 0;
}if (n != -64) {
n = (int) Math.pow(n, 5);
n = (int) n % 29;
}
t.add(n);
}// creamos un array de char del alfabeto ordenado
char[] valores = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z' };// por cada valor de t añadimos a g su caracter correspondiente
for (Integer n : t) {
if (n < 27)
if (n != 0) /// <- aquí si no es 0 que inserte el valor ...
g += "" + valores[n - 1];
else g += " "; /// ... <- de lo contrario pon espacio
}
System.out.println("El mensaje encriptado es:" + g + " - "
+ t.toString());
Hola, me podrian ayudar, he estado intentando realizar lo siguiente: una cadena de texto tranformo a numeros (hecho), aplico operaciones a esos numeros (hecho), los numeros ya operados les remplazo por la letra q corresponde (aun no hecho) ....podrian ayudarme por favor, un ejemplo es:
Texto a Numero : "a b c g h i" -> 1 2 3 7 8 9
Operando Numeros : 1 2 3 7 8 9 -> 5 6 7 11 12 13
Numeros a texto: 5 6 7 11 12 13 -> "e f g k l m" (esto aun no sale)
aki dejo mi codigo y lo q he intentado, espero me puedan ayudar:
public static void main(String[] args) {
//Pide la cadena de texto al usuario
String mensaje= JOptionPane.showInputDialog( null, "Ingrese el mensaje a encriptar: ","CRIPTOGRAFIA",JOptionPane.WARNING_MESSAGE);
//Transforma a numero la cadena y aplica operaciones a los numeros
String cad = mensaje.toLowerCase();
String t = "";
String g = "";
for (int i = 0; i < cad.length(); ++i) {
char ch = cad.charAt(i);
if (!t.isEmpty()) {t += " ";}
int n = (int)ch - (int)'a' + 1;
if (n == -64){n=0;}
n = (int)Math.pow(n,5);
n = (int)n%29;
t += String.valueOf(n);}
//Este fue mi intento para volver a tranformar a letras, pero no corrio:
String cadnum = t.toLowerCase();
for (int m = 0; m < cadnum.length(); ++m) {
char ch2 = cadnum.charAt(m);
if (ch2==1){ch2 = 'A';} if (ch2==15){ch2 = 'O';}
if (ch2==2){ch2 = 'B';} if (ch2==16){ch2 = 'P';}
if (ch2==3){ch2 = 'C';} if (ch2==17){ch2 = 'Q';}
if (ch2==4){ch2 = 'D';} if (ch2==18){ch2 = 'R';}
if (ch2==5){ch2 = 'E';} if (ch2==19){ch2 = 'S';}
if (ch2==6){ch2 = 'F';} if (ch2==20){ch2 = 'T';}
if (ch2==7){ch2 = 'G';} if (ch2==21){ch2 = 'U';}
if (ch2==8){ch2 = 'H';} if (ch2==22){ch2 = 'V';}
if (ch2==9){ch2 = 'I';} if (ch2==23){ch2 = 'W';}
if (ch2==10){ch2 = 'J';} if (ch2==24){ch2 = 'X';}
if (ch2==11){ch2 = 'K';} if (ch2==25){ch2 = 'Y';}
if (ch2==12){ch2 = 'L';} if (ch2==26){ch2 = 'Z';}
if (ch2==13){ch2 = 'M';}
if (ch2==14){ch2 = 'N';}
char n2 = (char)ch2;
g += String.valueOf(n2);
}
// Aki debe mostrar el texto en letras ya remplazado
JOptionPane.showMessageDialog(null, "El mensaje encriptado es:"+nl+""+g+"","CRIPTOGRAFIA",JOptionPane.WARNING_MESSAGE); }}