Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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 Char到Int,更改Int值,返回Char,并添加到字符串_Java_Encryption_Caesar Cipher - Fatal编程技术网

Java Char到Int,更改Int值,返回Char,并添加到字符串

Java Char到Int,更改Int值,返回Char,并添加到字符串,java,encryption,caesar-cipher,Java,Encryption,Caesar Cipher,我觉得我非常接近解决这个问题。如果提供一个字符串,我想将字符串中的字符转换为int,将另一个方法(getKey)中的值添加到此数字,如果结果大于26,则减去26。然后,将这个新的int转换为它的char,最后将该char放在字符串的末尾。到目前为止,它只是返回减去空格的输入,这是一半的地方哈哈。 有趣的是 msg.replace(msg.charAt(i), btc); // from the bottom 与 启动无限循环。任何建议都将不胜感激 String msg = "";

我觉得我非常接近解决这个问题。如果提供一个字符串,我想将字符串中的字符转换为int,将另一个方法(
getKey
)中的值添加到此数字,如果结果大于26,则减去26。然后,将这个新的
int
转换为它的
char
,最后将该
char
放在
字符串的末尾。到目前为止,它只是返回减去空格的输入,这是一半的地方哈哈。
有趣的是

msg.replace(msg.charAt(i), btc);   // from the bottom

启动无限循环。任何建议都将不胜感激

    String msg = "";
    int key;
    int cnum;
    for(int i = 0; i< message.length();i++){
        if(Character.isLetter(message.charAt(i))){
            msg += (message.charAt(i));
        }
    }



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

        char ch = msg.charAt(i);
        key = getKey();

            cnum = (int)ch + key;
            if(cnum > 26){
                cnum -= 26;
            }

        char btc = (char)cnum;
        msg.replace(msg.charAt(i), btc);
    }

return msg;
String msg=”“;
int键;
国际cnum;
对于(int i=0;i26){
cnum-=26;
}
char btc=(char)cnum;
消息替换(消息字符(i),btc);
}
返回味精;

您的问题已经到了第一线

msg.replace(msg.charAt(i),btc)

由于字符串是不可变的,String.replace()将返回一个新字符串,而不会修改现有字符串

我建议您使用StringBuilder(),附加被替换的字符或附加现有字符。

Replace
msg.Replace(msg.charAt(I),btc)

带有
msg=msg.replace(msg.charAt(i),btc)

String
是不可变的,
msg.replace
返回一个新的
String
,并且不修改原始字符串。由于该方法和msg+=都依赖for语句来避免无限重复,为什么使用后一种方法会导致无限循环?您向msg添加一个字符,然后递增i。因此,我永远不会到达msg.length()。
    String msg = "";
    int key;
    int cnum;
    for(int i = 0; i< message.length();i++){
        if(Character.isLetter(message.charAt(i))){
            msg += (message.charAt(i));
        }
    }



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

        char ch = msg.charAt(i);
        key = getKey();

            cnum = (int)ch + key;
            if(cnum > 26){
                cnum -= 26;
            }

        char btc = (char)cnum;
        msg.replace(msg.charAt(i), btc);
    }

return msg;