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();
}
添加回答
舉報