我正在尝试创建一种使用凯撒密码加密单词的方法 这是代码:
public static void main (String [] args)
{
String s = "ahmed";
int k = 2;
char[] c = new char[5];
int[] a = new int[s.length()];
for (int i = 0; i<s.length();i++){
a[i] = Secret_Code_Library.getDigit(s.charAt(i));
a[i] = i + k ;
c[i] = Secret_Code_Library.getLetter(a[i]);
}
String ss = String.valueOf(c);
}
Secret_Code_Library
是一个包含两个方法的类
(getDigit(char)
:返回字符a=0、b=1...等的编号,并且
getLetter(int)
:返回数字对应的字母)。
我的问题是当我尝试加密一个单词时它只加密
正确输入第一个字母并将其保存到数组 a 中。
P.S:我必须使用这两种方法。
上述代码的输出是:cdefg
而它应该是:cjogf
这是类(class):
public class Secret_Code_Library {
public static final char [] LETTERS={'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' };
public static char getLetter(int digit){
return LETTERS[digit]; }
public static int getDigit(char ch){
int digit=0;
switch (ch){
case 'A': digit=0; break; case 'B': digit=1; break; case 'C': digit=2; break;
case 'D': digit=3; break; case 'E': digit=4; break; case 'F': digit=5; break;
case 'G': digit=6; break; case 'H': digit=7; break; case 'I': digit=8; break;
case 'J': digit=9; break; case 'K': digit=10; break; case 'L': digit=11; break;
case 'M': digit=12; break; case 'N': digit=13; break; case 'O': digit=14; break;
case 'P': digit=15; break; case 'Q': digit=16; break; case 'R': digit=17; break;
case 'S': digit=18; break; case 'T': digit=19; break; case 'U': digit=20; break;
case 'V': digit=21; break; case 'W': digit=22; break; case 'X': digit=23; break;
case 'Y': digit=24; break; case 'Z': digit=25; break;
}// switch
return digit;
}}
最佳答案
a[i]= i + k ;
应该是
a[i] = a[i] + k;
因为您不是将 key 添加到当前加密字符的位置,而是将字符本身的整数值添加。
但这还不够。当您使用 k = 2 加密“z”时会发生什么?如果 Secret_Code_Library.getLetter(a[i]);
尚未为您执行此操作,您应该按字母表进行环绕。
如果你的字母表有 26 个字符长,那么应该这样做:
a[i] = (a[i] + k) % 26;
关于java - 使用凯撒密码和给定方法进行加密..Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34223987/