为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

心有法竹 2024-01-28 16:34:48
我只是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;     }  }}
查看完整描述

4 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

那是因为你试图返回 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;

}


查看完整回答
反对 回复 2024-01-28
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

该错误代码意味着该return语句没有给出正确的变量类型。你的方法想要String返回,但正在获取char。char通过将您的to更改String为可以轻松解决此问题String.valueOf(newMsg)。


public static 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 String.valueOf(newMsg);

     }


     else{

      return String.valueOf(letter);

     }

    }

    //should not come to this

    return "a";

    }


查看完整回答
反对 回复 2024-01-28
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

当该方法要求您返回字符串时,您试图返回字符。您希望在方法的开头创建一个新字符串,并将字符串的下一个字符设置为该值,而不是返回newMsgor ,如下所示: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;

}


查看完整回答
反对 回复 2024-01-28
?
阿晨1998

TA贡献2037条经验 获得超6个赞

您的代码无法按您的预期工作。循环的第一次迭代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();

}


查看完整回答
反对 回复 2024-01-28
  • 4 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信