我必须扫描一遍:
JD IR BW TQ DW SH UB XW AH NG AS XW CH UF BW FO DW SH UB BW TQ GW UH YG JV IE VM YE JD UO
然后将每个字符的左右字母与本文中的相应字符进行匹配:
MONCLETABDFGHIJKPQRSUVWXYZ
所以在第一篇文章中,J会有左写字母(I),D会有正确的字母(F)
这将给我一个解码的消息。唯一的问题是我不知道用什么方法来解决这个问题。
有人有什么想法吗?我觉得自己没有足够的知识甚至不知道从哪里开始。
我设置了消息(MONCLET ....)和密钥(JD IR BW ....)。但解码后的消息正在使用消息和密钥创建一条最终消息。
使用此行读取行:
BufferedReader f = new BufferedReader (new FileReader("C:\\assignment5\\data20.txt"));
for (int i = 0 ; i < 2 ; i++)
{
key = f.readLine ();
coded = f.readLine ();
alpha = prepareKey (key);
System.out.println (alpha);
message = decode (coded, alpha);
System.out.println (message);
}
f.close ();
使用
准备密钥private static String prepareKey (String key)
{
return key;
}
使用
准备解码后的字符串private static String decode (String coded, String key)
{
return coded;
}
答案 0 :(得分:0)
首先,您可以尝试将字母放在数组形式或列表(即ArrayList)中,然后您应该尝试循环实现解决方案逻辑的值。 然后你应该在String变量中建立你的答案。 所以你可以从这开始将String转换成Char数组
public class StringToCharJava {
public static void main(String[] args) {
String str = "jtest";
//string to char array
char[] chars = str.toCharArray();
System.out.println(chars.length);
//char at specific index
char c = str.charAt(2);
System.out.println(c);
//Copy string characters to char array
char[] chars1 = new char[7];
str.getChars(0, 7, chars1, 0);
System.out.println(chars1);
}
}
答案 1 :(得分:0)
假设你已经解析了输入,它看起来像这样:
String message = "JD IR BW TQ DW SH UB XW AH NG AS XW CH UF BW FO DW SH UB BW TQ GW UH YG JV IE VM YE JD UO";
String translations = "MONCLETABDFGHIJKPQRSUVWXYZ";
然后你可以解码这个消息:
String decodedMessage = doDecode(message, translations);
System.out.println(decodedMessage);
这些是支持方法:
private String doDecode(String message, String translationsString) {
Map<String, String> leftTranslations = buildTranslationTable(translationsString, -1);
Map<String, String> rightTranslations = buildTranslationTable(translationsString, 1);
String translation = "";
String[] messagePairs = message.split(" ");
for (String messagePair : messagePairs) {
String messageLeft = Character.toString(messagePair.charAt(0));
String messageRight = Character.toString(messagePair.charAt(1));
String translationLeft = leftTranslations.get(messageLeft);
String translationRight = rightTranslations.get(messageRight);
translation += translationLeft + translationRight;
}
return translation;
}
private Map<String,String> buildTranslationTable(String translationsString, int offset) {
Map<String,String> translations = new Hashtable<>();
for (int i=0; i<translationsString.length(); i++) {
if ( i >= 0 && i < translationsString.length() &&
(i + offset) >= 0 && (i + offset) < translationsString.length() ) {
String key = Character.toString(translationsString.charAt(i));
String value = Character.toString(translationsString.charAt(i + offset));
translations.put(key, value);
}
}
return translations;
}