我目前正在为我的Java类做一个Enigma项目(不,不是那个,你要去学习的那个)。然而,我的转子密码似乎有一个大问题,事实上,它不是像它应该加密。
//The rotors i am using are the ones in the first enigma deployed in the german military
public static String RotorCipher(ArrayList<ArrayList<Character>> affine, String input){
String constructor = "";
ArrayList<ArrayList<Character>> affine2 = new ArrayList<ArrayList<Character>>(affine);
ArrayList<Character> list = new ArrayList<Character>(affine.get(0)); //this is a char array with the alphabet in upper case
affine2.remove(0);
for(char x : input.toCharArray()){
int loc = list.indexOf(x);
if(loc == -1){
constructor += ""+x; //if it isn't in there, just remove it
}
else{
for(ArrayList<Character> rotor : affine2){
System.out.println(rotor);
System.out.println(loc);
System.out.print(x + " to ");
x = AffineCipher(list, rotor, x+"").toCharArray()[0]; //use affine to properly pass rotor
System.out.println(x);
}
}
constructor += x+"";
}
return constructor;
}
我运行我的代码,并通过它传递O,根据我的文档,它应该立即返回S。但是,我在传递它时得到这个输出。
> >r o
[E, K, M, F, L, G, D, Q, V, Z, N, T, O, W, Y, H, X, U, S, P, A, I, B, R, C, J]
14
O to Y
[A, J, D, K, S, I, R, U, X, B, L, H, W, T, M, C, Q, G, Z, N, P, Y, F, V, O, E]
14
Y to O
[B, D, F, H, J, L, C, P, R, T, X, V, Z, N, Y, E, I, W, G, A, K, M, U, S, Q, O]
14
O to Y
Y
>
我不知道如何解决这个问题,我浪费了我生命中的几个小时试图解决这个问题,但没有成功。
先谢谢你了。
1条答案
按热度按时间ibps3vxo1#
从输出中可以看出,您没有更改输入和输出。实际上,它看起来就像是只输出第一次转换的结果。
我建议你把你的程序分解成更小的块:
1.一个函数,它接受一个字母和一个转子列表,该列表使用函数(1)通过转子转换该字母。
1.一个函数,该函数获取一串字母和一列转子,并使用函数(2)通过转子转换该字符串。
这样,您就可以调试程序中的每一步,并准确地找到一步可能出错的地方。
祝你好运!