用字符包裹字符

时间:2015-10-18 01:01:52

标签: java

我注意到程序中有轻微的故障。除了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);
} 

1 个答案:

答案 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'))

如果需要,可以单独处理大写字母。