【发布时间】:2018-11-22 15:10:33
【问题描述】:
Caesar Cipher using Frequency Analysis** in Java:这是我的解码部分代码:
public static String decode (String code){
int key=0;
final int ALPHABET_SIZE = 26;
int[] freqs = new int[ALPHABET_SIZE];
for (int l=0;l<freqs.length;l++){
freqs[l]=0;
}
for (int k=0;k<code.length();k++){
if (code.charAt(k)>='a' && code.charAt(k)<='z'){
freqs[code.charAt(k)-'a']++;
}
}
int biggest = 0;
for (int t=0;t<freqs.length;t++){
if (freqs[t]>biggest){
biggest= t;
}
}
if (biggest<4){
key = (biggest + 26 - ('e'+'a'));
}
else{
key = biggest + 'a' - 'e';
}
return (decode(code,key));
}
我不能使用映射、导入、列表或添加键,我知道频率最高的字母是 E,但我不知道如何在不同的函数中实现它。我将不胜感激一个更优雅的解决方案,谢谢。 ** 频率分析
【问题讨论】:
-
更优雅的解决方案将使用您拥有的所有 Java 对象它是一种面向对象语言,因此更好的解决方案将使用它
-
字母频率:ETAOINSHRDLU...虽然[空格]比E更频繁。
标签: java caesar-cipher frequency-analysis