为了账号安全,请及时绑定邮箱和手机立即绑定

密码加密的基本算法无法按预期的字母数组工作

密码加密的基本算法无法按预期的字母数组工作

蛊毒传说 2021-12-10 09:55:27
所以,我有这个用于 Java 密码的算法。我有一个字母数组:char[] alphabet = {'z', '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'};还有一个存储字符的表(基于输入)。鉴于我已经检查了很多次并且它完全按照预期存储字符,这并不是那么重要。我下面有一个代码,以便字母表数组中 Y 轴的字母值上的每个字母在字母表的“轴”上向右移动 Y+1 次,如果值超过 25,则返回到第一个值。这意味着如果“A”在 Y=0 处,它会从字母轴上的值 1 变为 2,这意味着“B”和“X”在 Y=2 处的值将 24 变为 27,并且因为超过 25 会变成 27-25=2,'B'。为什么下面的代码为位于 X=0 Y=0 的字母“A”输出“Z”?for(int p = 0; p < number; p++) {            for(int q = 0; q < number; q++) {                for(int r = 0; r < 26; r++) {                    if(table[q][p] == alphabet[r]) {                        table[q][p] = alphabet[(r+p+1)%26];                    }                }            }        }
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

我现在才意识到我的问题。该代码将起作用,并将“A”更改为“B”。但是它可以继续测试从 2 到 25 的 r 值,该表槽是否等于下一个数字。当然,它做到了。字符,现在是 'B',等于字母数组的索引 2,依此类推,直到它最终结束,变成 'Z'。我所要做的就是添加break;到最后一个for循环中。感谢您的帮助!


查看完整回答
反对 回复 2021-12-10
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

您添加的代码将在 X=0 和 Y=0 时为“A”生成字母“Z”。我假设 [q] 和 [p] 等于 0


问题出在这里:


if(table[q][p] == alphabet[r]) {

     table[q][p] = alphabet[(r+p+1)%26];

 }

如果 table[0][0] 保存“A”值,则当 r 变量等于 25 时,此条件为真。因为在您的字母表数组中,“A”字母位于索引 25 下。然后:


table[q][p] = alphabet[(r+p+1)%26];

所以 table[0][0] 将等于字母表 [(25+0+1)%26] 并且 26%26 是 0。


table[q][p] = alphabet[0]

这是数组中的“Z”字母。


更新:试试这个:


    Character[] alphabet = {'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'};

    Character[][] table = {{'a', 'b'}, {'c', 'd'}, {'e', 'f'}};


    for (int x = 0; x < table.length; x++) {

        for (int y = 0; y < table[x].length; y++) {

            int index = Arrays.asList(alphabet).indexOf(table[x][y]);

            table[x][y] = alphabet[(index + y + 1) % 26];

        }

    }


查看完整回答
反对 回复 2021-12-10
  • 2 回答
  • 0 关注
  • 168 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信