我注意到程序中有轻微的故障。除了a / b和c之外,它将解密每个字符(d不包括在内)。这是因为它的变化为-4。很显然,他们是循环的字母表中唯一的字符......我注意到y = 121' - ' = 95(121-95 = 26)和w = 119']' = 93(119-93 = 26)和' x' = 120和' ^' = 94(120-94 = 126)。
if (p.isLetter(element))
{
p = (char) (element + 5);
}
if(element > 'z' && Character.isLetter(element))
{
element = (char)(element - 26);
}
else if(Character.isLetter(element))
{ element = (char)(element+ 26);
}
答案 0 :(得分:1)
问题在于,如果你将角色移到a到z的范围之外,那么isLetter()将返回false,因此在应用移位后你的两个测试将无法满足,因为角色不再是一个字母。
将isLetter()测试放在整个块中,并将其从其他ifs中删除:
if (Character.isLetter(character))
{
character = (char) (character + shift);
if(character > 'z')
{
character = (char)(character - 26);
}
else if(character < 'a')
{
character = (char)(character + 26);
}
}
该函数只处理小写字母,因此将isLetter()的检查更改为:
if((character >= 'a') && (character <= 'z'))
如果需要,可以单独处理大写字母。