Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 凯撒:按我说的,不行_Java - Fatal编程技术网

Java 凯撒:按我说的,不行

Java 凯撒:按我说的,不行,java,Java,我知道有很多关于凯撒密码的话题,但我喜欢用自己的方式解决问题。 因此,它不起作用,但我想在一些帮助下,我可能会让它按我的方式发挥作用。我相信,当你独自解决问题时,你们都知道那种美好的感觉 这是我的想法。 制作由字母组成的字符数组。 和字符串,并将消息转换为代码。 2用于循环。一个用于从消息中设置字符的外部, 和通过字母阵列扫描的内部。 当消息中的字母在数组中遇到字符时,它将用数组中的第三个字符(3的键)替换他 下面是目前编写的一段代码: char[] alphabet = { 'a',

我知道有很多关于凯撒密码的话题,但我喜欢用自己的方式解决问题。 因此,它不起作用,但我想在一些帮助下,我可能会让它按我的方式发挥作用。我相信,当你独自解决问题时,你们都知道那种美好的感觉

这是我的想法。 制作由字母组成的字符数组。 和字符串,并将消息转换为代码。 2用于循环。一个用于从消息中设置字符的外部, 和通过字母阵列扫描的内部。 当消息中的字母在数组中遇到字符时,它将用数组中的第三个字符(3的键)替换他

下面是目前编写的一段代码:

    char[] alphabet = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'o', 'p','r','s','t','u', 'v', 'z'};

    String message = " This is message for coding";

    message = message.toLowerCase();
    String codedMsg = ""; 


    for(int i = 0; i < message.length(); i++)
    {

        for(int j =0; j < alphabet.length; j++)
        {
            if(message.charAt(i) == alphabet[j])
            {
    codedMsg += alphabet[j +3 ];

alphabet[j+3]
超出了数组的大小
alphabet

alphabet[j+3]
超出了数组的大小
alphabet

注释中提到的问题是
alphabet[j+3]
超出
j
大于或等于
alphabet.length-3
的范围。我可以建议的解决方案是将
字母表[j+3]
更改为
字母表[(j+3)%alphabet.length]
,一旦索引超出范围,这将具有“循环”行为

如评论中所述,问题在于
alphabet[j+3]
超出
j
大于或等于
alphabet.length-3
的范围。我可以建议的解决方案是将
字母表[j+3]
更改为
字母表[(j+3)%alphabet.length]
,一旦索引超出范围,这将具有“循环”行为

正如其他人所指出的,你的问题是
字母表[j+3]
将在字母表末尾超出范围。这里有一个解决办法

替换这个

message = message.replace(message.charAt(i), alphabet[j + 3]);
用这个

if(j < alphabet.length - 3){
    message = message.replace(message.charAt(i), alphabet[j + 3]);
}else{
message = message.replace(message.charAt(i), alphabet[j + 3 - alphabet.length]);
}
if(j

如果字母表在末尾附近结束,则应将字母表循环回开头。例如,如果输入字符
z
,它输出
c

,正如其他人所指出的,您的问题是
字母表[j+3]
将在字母表末尾超出范围。这里有一个解决办法

替换这个

message = message.replace(message.charAt(i), alphabet[j + 3]);
用这个

if(j < alphabet.length - 3){
    message = message.replace(message.charAt(i), alphabet[j + 3]);
}else{
message = message.replace(message.charAt(i), alphabet[j + 3 - alphabet.length]);
}
if(j

如果字母表在末尾附近结束,则应将字母表循环回开头。例如,如果字符
z
被输入,它将输出
c

您的问题是您有
字母表[j+3]
。 但是因为
j
,所以当
j=alphabet.length-2
alphabet[j+3]
变成
alphabet[alphabet.length+1]
时,你就跳出了数组

要解决这个问题,您可以使用
字母表[(j+3)%alphabet.length]

现在您的代码将运行,但不正确。

由于您总是操纵
消息
,因此它将在内部循环中被多次替换

for(int j =0; j < alphabet.length; j++)
        {
            if(message.charAt(i) == alphabet[j])
            {
                message = message.replace(message.charAt(i), alphabet[j + 3]); // THIS LINE IS THE PROBLEM

你的问题是你有
字母表[j+3]
。 但是因为
j
,所以当
j=alphabet.length-2
alphabet[j+3]
变成
alphabet[alphabet.length+1]
时,你就跳出了数组

要解决这个问题,您可以使用
字母表[(j+3)%alphabet.length]

现在您的代码将运行,但不正确。

由于您总是操纵
消息
,因此它将在内部循环中被多次替换

for(int j =0; j < alphabet.length; j++)
        {
            if(message.charAt(i) == alphabet[j])
            {
                message = message.replace(message.charAt(i), alphabet[j + 3]); // THIS LINE IS THE PROBLEM


alphabet[j+3]
在迭代结束时无效即使修复了此异常,代码仍然无法正常工作。String.replace将不加区别地替换任何出现的字符,因此您可能会替换已替换的字符。例如,“abcd”将变成“gefg”,而不是“defg”。我现在已经解决了,请转告阿尔弗雷德·奥凯松。只是不知道我应该把固定程序放在这里还是不放。
alphabet[j+3]
在迭代结束时无效即使你修复了这个异常,代码仍然不能正常工作。String.replace将不加区别地替换任何出现的字符,因此您可能会替换已替换的字符。例如,“abcd”将变成“gefg”,而不是“defg”。我现在已经解决了,请转告阿尔弗雷德·奥凯松。只是不知道我是否应该在这里放置固定程序。我想制作解码消息的方法,所以我需要字母[j-3]%alphabet.length,但它不工作。再次显示索引超出范围。你能帮我吗。我想制作解码消息的方法,所以我需要字母[j-3]%alphabet.length,但它不起作用。再次显示索引超出范围。你能帮我一下吗。THx。你能告诉我为什么当我写字母表[j-3]%字母表。长度]时,它会显示索引超出范围吗?当我试图解码信息时?@汉学,当j值小于3时,会发生这种情况,例如字母表[2-3]%字母表。长度会给你-1次Egor,但是%alphabet.length不是也会在另一个方向产生循环行为吗?我的意思是当它达到0index时,它会进入数组中的最后一个索引吗?@汉学,当然不是,为什么它会这样?%只是余数运算,-1%25不会给你24,它会给你-1如果我理解正确,它不能这样做,因为当我从alphabed(j)中扣除smth时,我最终会得到负指数和越界?你有什么建议吗?佩拉普斯?THx.你能告诉我为什么当我写字母[j-3]%字母表长度]时,它会显示索引越界吗?当我试图解码信息时?@汉学,j小于3的值会发生这种情况,例如字母表[2-3]%字母表长度会给你-1次Egor,但是%alphabet.length不会在其他目录中创建循环行为吗