2016-04-29 4 views
1

Я чувствую, что я очень близок к решению этой проблемы. При условии, что я хочу преобразовать символ из строки в int, добавьте значение из другого метода (getKey) к этому номеру, и если результат больше 26, вычтите 26. Затем преобразуйте этот новый int в его char, и, наконец, поместите его в конец string. На данный момент он просто возвращает вход с вычитаемыми пробелами, который на полпути хаха. Интересно, что заменаChar to Int, изменить значение int, вернуться к char и добавить строку

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

с

msg += btc; 

инициирует бесконечную петлю. Любые советы были бы чрезвычайно оценены!

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' неизменен,' msg.replace' возвращает новый 'String', и не модифицирует исходную. – Berger

+0

Поскольку этот метод и msg + = полагаются на оператор for, чтобы избежать бесконечного повторения, почему использование последнего метода может привести к бесконечному циклу? –

+0

Вы добавляете один символ в msg, затем вы увеличиваете i. Поэтому я никогда не достигнет msg.length(). – Hok

ответ

0

Ваша проблема в строке

msg.replace (msg.charAt (I), BTC);

Поскольку String неизменен, String.replace() вернет новую строку и не изменит существующую строку.

Я предлагаю вам использовать StringBuilder(), добавить замененный символ или добавить существующий символ.

1

Заменить msg.replace(msg.charAt(i), btc); с msg = msg.replace(msg.charAt(i), btc);