亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何修復凱撒密碼程序中的“char無法轉換為java.lang.String”

如何修復凱撒密碼程序中的“char無法轉換為java.lang.String”

心有法竹 2024-01-28 16:34:48
我只是java的初學者,我正在嘗試解決codingbat“Ceaser Cipher”問題。問題是“開發一種接受移位值和消息作為輸入的方法。移位值將不小于 -25 且不大于 25。消息中出現的任何非大寫字母的字符應該被編碼為它本身。” 程序已經應用了消息和值。例如,如果消息為“ABCDE”且移位為 1,則應打印“BCDEF”。每次我嘗試運行我的代碼時,都會收到“char無法轉換為java.lang.String line:9”錯誤。有誰知道如何解決這一問題?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;     }  }}
查看完整描述

4 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

那是因為你試圖返回 a而你的函數char的返回類型是。在Java中,和是不同的數據類型,這意味著它們不可互換,所有數據類型也是如此。如果您使用 IDE,您會收到警告,因此我建議您先在 IDE 中編寫代碼,然后再將其粘貼到 Coding Bat。CaesarCipherStringcharString


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

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;

}


查看完整回答
反對 回復 2024-01-28
?
牧羊人nacy

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

    }


查看完整回答
反對 回復 2024-01-28
?
幕布斯7119047

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;

}


查看完整回答
反對 回復 2024-01-28
?
阿晨1998

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();

}


查看完整回答
反對 回復 2024-01-28
  • 4 回答
  • 0 關注
  • 219 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號