2016-04-29 10 views
1

この問題を解決するのに非常に近いと感じます。文字列を指定して文字列からintに変換し、別のメソッド(getKey)の値をこの数値に追加し、結果が26より大きい場合は26を減算します。次に、この新しいintをその数値に変換します。 charとし、最終的にをstringの末尾に置きます。現時点では、半角スペースを引いた入力を返します。intをCharに変換し、int値を変更してからcharに戻し、文字列に追加します。

msg += btc; 

msg.replace(msg.charAt(i), btc); // from the bottom 

を交換興味深いことに は、無限ループを開始します。どんなアドバイスもすごく感謝しています!

String msg = ""; 
    int key; 
    int cnum; 
    for(int i = 0; i< message.length();i++){ 
     if(Character.isLetter(message.charAt(i))){ 
      msg += (message.charAt(i)); 
     } 
    } 



    for(int i = 0; i< msg.length(); i++){ 

     char ch = msg.charAt(i); 
     key = getKey(); 

      cnum = (int)ch + key; 
      if(cnum > 26){ 
       cnum -= 26; 
      } 

     char btc = (char)cnum; 
     msg.replace(msg.charAt(i), btc); 
    } 

return msg; 
+0

'STRING'は新しい' STRING'を返し、オリジナルのものを変更しないmsg.replace' '、不変であるとmsg.replace(msg.charAt(i), btc); を交換してください。 – Berger

+0

そのメソッドとmsg + =は無限の繰り返しを避けるためにforステートメントに依存しているので、なぜ後者のメソッドを使用すると無限ループが発生するのでしょうか? –

+0

msgに1つのcharを追加した後、iを増やします。だから私は決してmsg.length()に到達しません。 – Hok

答えて

0

あなたの問題はラインで(BTC msg.charAt(I)、)

msg.replaceです。

Stringは変更不可能なため、String.replace()は新しい文字列を返し、既存のStringは変更しません。

StringBuilder()を使用して、置き換えられた文字を追加するか、既存のcharを追加することをお勧めします。

1

msg = msg.replace(msg.charAt(i), btc);

関連する問題