“如何修复”;无法将字符转换为java.lang.String;在凯撒密码程序中
我只是java的初学者,我正在努力解决编码蝙蝠“凯瑟密码”的问题。问题是“开发一种接受移位值和消息作为输入的方法。移位值将不小于-25且不大于25。消息中出现的任何字符,如果不是大写字母,则应将其本身编码。”程序已经应用了该消息和值。 例如,如果消息为“ABCDE”,且班次为1,则应打印“BCDEF” 每次尝试运行代码时,都会出现“char不能转换为java.lang.String行:9”错误。有人知道如何解决这个问题吗“如何修复”;无法将字符转换为java.lang.String;在凯撒密码程序中,java,ascii,Java,Ascii,我只是java的初学者,我正在努力解决编码蝙蝠“凯瑟密码”的问题。问题是“开发一种接受移位值和消息作为输入的方法。移位值将不小于-25且不大于25。消息中出现的任何字符,如果不是大写字母,则应将其本身编码。”程序已经应用了该消息和值。 例如,如果消息为“ABCDE”,且班次为1,则应打印“BCDEF” 每次尝试运行代码时,都会出现“char不能转换为java.lang.String行:9”错误。有人知道如何解决这个问题吗 public String CaesarCipher(int shift,
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;
}
}
}
公共字符串密码(int-shift,字符串消息){
对于(int i=0;i
当方法要求您返回字符串时,您正在尝试返回字符。您不想返回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;
}
公共字符串密码(int-shift,字符串消息){
字符串更新_message=“”;
对于(int i=0;i
错误代码意味着return
语句没有给出正确的变量类型。您的方法想要返回String
,但正在获取char
。通过使用String.valueOf(newMsg)
将char
更改为String
,可以轻松解决此问题
公共静态字符串密码(int-shift,字符串消息){
对于(int i=0;i
您的代码没有按预期工作。for
循环的第一次迭代将始终退出,因为返回
语句。还有冗余变量和强制转换。即使是一个免费的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();
}
公共静态字符串密码(int-shift,字符串消息){
StringBuilder=新的StringBuilder();
对于(int i=0;i
这是因为您试图返回一个char
,而CaesarCipher
函数的返回类型是String
。在Java中,char
和String
是不同的数据类型,这意味着它们不可互换,所有数据类型也是如此。如果您使用的是IDE,您会收到一条警告,因此我建议您在将代码粘贴到编码Bat之前在IDE中编写代码
这可能有助于:
我相信这就是你需要的:
公共字符串密码(int-shift,字符串消息){
字符串结果=”;
对于(int i=0;i
消息。字符(i)
不是l值<代码>字符串s是不可变的。Matthieu是正确的。我用正确的方法更新了我的答案(在开始时创建一个空字符串,并在循环的每个迭代中添加到它)
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();
}