如何修复凯撒密码程序中的“char无法转换为java.lang.String”

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


每次我尝试运行我的代码时,都会收到“char无法转换为java.lang.String line: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;

     }

  }

}


心有法竹
浏览 121回答 4
4回答

元芳怎么了

那是因为你试图返回 a而你的函数char的返回类型是。在Java中,和是不同的数据类型,这意味着它们不可互换,所有数据类型也是如此。如果您使用 IDE,您会收到警告,因此我建议您先在 IDE 中编写代码,然后再将其粘贴到 Coding Bat。CaesarCipherStringcharString我相信这就是您所需要的:public String CaesarCipher(int shift, String message) {  String result = "";  for (int i = 0; i < message.length(); i++) {    char letter = message.charAt(i);    if (Character.isUpperCase(letter)) {      int ascii = (int) letter;      ascii += shift;      result += Character.toString((char)ascii);    } else {      result += Character.toString(letter);    }  }  return result;}

牧羊人nacy

该错误代码意味着该return语句没有给出正确的变量类型。你的方法想要String返回,但正在获取char。char通过将您的to更改String为可以轻松解决此问题String.valueOf(newMsg)。public static String CaesarCipher(int shift, String message) {&nbsp; &nbsp; for (int i = 0;i < message.length(); i++){&nbsp; &nbsp; &nbsp;char letter = message.charAt(i);&nbsp; &nbsp; &nbsp;if (Character.isUpperCase(letter)){&nbsp; &nbsp; &nbsp; int ascii = (int)letter;&nbsp; &nbsp; &nbsp; ascii += shift;&nbsp; &nbsp; &nbsp; char newMsg = (char)ascii;&nbsp; &nbsp; &nbsp; return String.valueOf(newMsg);&nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp;else{&nbsp; &nbsp; &nbsp; return String.valueOf(letter);&nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; }&nbsp; &nbsp; //should not come to this&nbsp; &nbsp; return "a";&nbsp; &nbsp; }

幕布斯7119047

当该方法要求您返回字符串时,您试图返回字符。您希望在方法的开头创建一个新字符串,并将字符串的下一个字符设置为该值,而不是返回newMsgor ,如下所示:letterpublic String CaeserCipher(int shift, String message) {&nbsp; String updated_message = "";&nbsp; for (int i = 0; i < message.length(); i++) {&nbsp; &nbsp; ...&nbsp; &nbsp; char newMsg = (char)ascii;&nbsp; &nbsp; updated_message += newMsg;&nbsp; &nbsp; ...&nbsp; &nbsp; updated_message += letter;&nbsp; } // end for&nbsp; return updated_message;}

阿晨1998

您的代码无法按您的预期工作。循环的第一次迭代for将始终退出becausereturn语句。还有冗余变量和强制转换。即使像IntelliJ IDEA Community这样的免费 Java IDE也会突出显示这些问题,因此请考虑安装一个。您想要做的是使用 a 构建结果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();}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java