4 回答
TA贡献1798条经验 获得超7个赞
那是因为你试图返回 a而你的函数char
的返回类型是。在Java中,和是不同的数据类型,这意味着它们不可互换,所有数据类型也是如此。如果您使用 IDE,您会收到警告,因此我建议您先在 IDE 中编写代码,然后再将其粘贴到 Coding Bat。CaesarCipher
String
char
String
我相信这就是您所需要的:
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;
}
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";
}
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;
}
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();
}
添加回答
举报