2016-04-29 14 views
1

Ich fühle, dass ich extrem nahe an der Lösung dieses Problems bin. Wenn ich eine Zeichenfolge bereitstellen möchte, möchte ich das Zeichen von der Zeichenfolge in ein int konvertieren, einen Wert von einer anderen Methode (getKey) zu dieser Zahl hinzufügen, und wenn das Ergebnis größer als 26 ist, subtrahieren Sie 26. Dann konvertieren Sie diese neue int in seine char, und schließlich das char am Ende einer string platzieren. Ab sofort gibt es einfach die Eingabe mit Leerzeichen subtrahiert, die Hälfte ist da haha. Interessanter ,Char to Int, int-Wert ändern, zurück zu char, und zu einer Zeichenfolge hinzufügen

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

mit

msg += btc; 

initiiert eine Endlosschleife. Jeder Rat würde sehr geschätzt werden!

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' ist unveränderlich,' msg.replace' ein neues 'String' zurückkehrt, und das Original nicht ändern. – Berger

+0

da sowohl diese Methode als auch msg + = auf die for-Anweisung angewiesen sind, um unendliche Wiederholungen zu vermeiden, warum könnte die Verwendung der letzteren Methode eine Endlosschleife verursachen? –

+0

Sie fügen ein Zeichen zu msg hinzu, dann erhöhen Sie i. Also werde ich niemals msg.length() erreichen. – Hok

Antwort

0

Ihr Problem ist in Zeile

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

Da String unveränderlich ist, gibt String.replace() eine neue Zeichenfolge zurück und ändert die vorhandene Zeichenfolge nicht.

Ich würde vorschlagen, dass Sie eine StringBuilder() verwenden, das ersetzte Zeichen anhängen oder das vorhandene Zeichen anhängen.

1

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