我只是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)
答案 0 :(得分:0)
当方法要求您返回String时,您尝试返回一个Character。与其返回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;
}
答案 1 :(得分:0)
该错误代码表示return
语句未提供正确类型的变量。您的方法想退回String
,但得到char
。通过使用char
将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";
}
答案 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中,String
和char
是不同的数据类型,这意味着它们不可互换,所有数据类型都一样。如果您使用的是IDE,则会收到警告,因此建议您在将代码粘贴到Coding Bat之前,在IDE中编写代码。
这可能会有所帮助:How to convert ASCII to String
我相信这就是您所需要的:
String