猿问

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

所以,我有这个用于 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];

                    }

                }

            }

        }


蛊毒传说
浏览 169回答 2
2回答

蝴蝶不菲

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

蓝山帝景

您添加的代码将在 X=0 和 Y=0 时为“A”生成字母“Z”。我假设 [q] 和 [p] 等于 0问题出在这里:if(table[q][p] == alphabet[r]) {&nbsp; &nbsp; &nbsp;table[q][p] = alphabet[(r+p+1)%26];&nbsp;}如果 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”字母。更新:试试这个:&nbsp; &nbsp; 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'};&nbsp; &nbsp; Character[][] table = {{'a', 'b'}, {'c', 'd'}, {'e', 'f'}};&nbsp; &nbsp; for (int x = 0; x < table.length; x++) {&nbsp; &nbsp; &nbsp; &nbsp; for (int y = 0; y < table[x].length; y++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int index = Arrays.asList(alphabet).indexOf(table[x][y]);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; table[x][y] = alphabet[(index + y + 1) % 26];&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }
随时随地看视频慕课网APP

相关分类

Java
我要回答