“如何修复”;无法将字符转换为java.lang.String;在凯撒密码程序中

“如何修复”;无法将字符转换为java.lang.String;在凯撒密码程序中,java,ascii,Java,Ascii,我只是java的初学者,我正在努力解决编码蝙蝠“凯瑟密码”的问题。问题是“开发一种接受移位值和消息作为输入的方法。移位值将不小于-25且不大于25。消息中出现的任何字符,如果不是大写字母,则应将其本身编码。”程序已经应用了该消息和值。 例如,如果消息为“ABCDE”,且班次为1,则应打印“BCDEF” 每次尝试运行代码时,都会出现“char不能转换为java.lang.String行:9”错误。有人知道如何解决这个问题吗 public String CaesarCipher(int shift,

我只是java的初学者,我正在努力解决编码蝙蝠“凯瑟密码”的问题。问题是“开发一种接受移位值和消息作为输入的方法。移位值将不小于-25且不大于25。消息中出现的任何字符,如果不是大写字母,则应将其本身编码。”程序已经应用了该消息和值。 例如,如果消息为“ABCDE”,且班次为1,则应打印“BCDEF”

每次尝试运行代码时,都会出现“char不能转换为java.lang.String行:9”错误。有人知道如何解决这个问题吗

public String CaesarCipher(int shift, String message) {
  for (int i = 0;i < message.length(); i++){
     char letter = message.charAt(i);

     if (Character.isUpperCase(letter)){
      int ascii = (int)letter;
      ascii += shift;
      char newMsg = (char)ascii;
      return newMsg;
     }

     else{
      return letter;
     }
  }
}
公共字符串密码(int-shift,字符串消息){
对于(int i=0;i
当方法要求您返回字符串时,您正在尝试返回字符。您不想返回
newMsg
letter
,而是想在方法开头创建一个新字符串,并将该字符串的下一个字符设置为该值,如下所示:

public String CaeserCipher(int shift, String message) {
  String updated_message = "";
  for (int i = 0; i < message.length(); i++) {
    ...
    char newMsg = (char)ascii;
    updated_message += newMsg;
    ...
    updated_message += letter;
  } // end for
  return updated_message;
}
公共字符串密码(int-shift,字符串消息){
字符串更新_message=“”;
对于(int i=0;i
错误代码意味着
return
语句没有给出正确的变量类型。您的方法想要返回
String
,但正在获取
char
。通过使用
String.valueOf(newMsg)
char
更改为
String
,可以轻松解决此问题

公共静态字符串密码(int-shift,字符串消息){
对于(int i=0;i
您的代码没有按预期工作。
for
循环的第一次迭代将始终退出,因为
返回
语句。还有冗余变量和强制转换。即使是一个免费的java IDE,也会突出这些问题,所以请考虑安装一个。

您要做的是使用
StringBuilder
构建结果,并在循环完成后返回:

public static String caesarCipher(int shift, String message) {
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < message.length(); i++) {
        char letter = message.charAt(i);
        if (Character.isUpperCase(letter)) {
            char shiftLetter = (char) (letter + shift);
            builder.append(shiftLetter);
        }
    }
    return builder.toString();
}
公共静态字符串密码(int-shift,字符串消息){
StringBuilder=新的StringBuilder();
对于(int i=0;i
这是因为您试图返回一个
char
,而
CaesarCipher
函数的返回类型是
String
。在Java中,
char
String
是不同的数据类型,这意味着它们不可互换,所有数据类型也是如此。如果您使用的是IDE,您会收到一条警告,因此我建议您在将代码粘贴到编码Bat之前在IDE中编写代码

这可能有助于:

我相信这就是你需要的:

公共字符串密码(int-shift,字符串消息){
字符串结果=”;
对于(int i=0;i
消息。字符(i)
不是l值<代码>字符串s是不可变的。Matthieu是正确的。我用正确的方法更新了我的答案(在开始时创建一个空字符串,并在循环的每个迭代中添加到它)
public static String caesarCipher(int shift, String message) {
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < message.length(); i++) {
        char letter = message.charAt(i);
        if (Character.isUpperCase(letter)) {
            char shiftLetter = (char) (letter + shift);
            builder.append(shiftLetter);
        }
    }
    return builder.toString();
}