如何解决“凯撒密码程序”中的“字符不能转换为java.lang.String”的问题

时间:2019-11-02 22:12:29

标签: java ascii

我只是Java的入门者,所以我试图弄清encodingbat“ Ceaser Cipher”问题。问题是说“开发一种接受移位值和消息作为输入的方法。移位值将不小于-25且不大于25。消息中出现的任何字符,并且不是大写字母应该被编码为本身。”该程序已经应用了消息和值。  例如,如果消息为“ ABCDE”且班次为1,则应打印“ BCDEF”。

Eveyrtime我尝试运行代码,但出现“字符无法转换为java.lang.String line:9”错误。有人知道如何解决这个问题吗?

select Description
from DeliveryType
group by Description
having count(*) > all (select count (*) from DeliveryType group by DeliveryTypeID)

4 个答案:

答案 0 :(得分:0)

当方法要求您返回String时,您尝试返回一个Character。与其返回newMsgletter,而是想在方法的开头创建一个新字符串,然后将字符串的下一个字符设置为该值,如下所示:

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;
}

答案 1 :(得分:0)

该错误代码表示return语句未提供正确类型的变量。您的方法想退回String,但得到char。通过使用charString更改为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";
    }

答案 2 :(得分:0)

您的代码无法按预期工作。 for循环的第一次迭代将始终退出,因为return语句。也有多余的变量和强制类型转换。甚至IntelliJ IDEA Community之类的免费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();
}

答案 3 :(得分:0)

这是因为您正在尝试返回char的同时返回CaesarCipher函数的类型。在Java中,Stringchar是不同的数据类型,这意味着它们不可互换,所有数据类型都一样。如果您使用的是IDE,则会收到警告,因此建议您在将代码粘贴到Coding Bat之前,在IDE中编写代码。

这可能会有所帮助:How to convert ASCII to String

我相信这就是您所需要的:

String