2012-04-05 3 views
2

Можно создать дубликат:
ROT-13 function in java?сдвиг символов в алфавите

я должен перенести все полукокса из строки 13 мест в алфавите

private static String encode(String line) { 
    char[] toEncode = line.toCharArray(); 
    for (int i = 0; i < toEncode.length; i++) { 
     if (Character.isLetter(toEncode[i])) { 
      toEncode[i] += 13; 
     } 
    } 
    line = String.valueOf(toEncode); 
    return line; 
} 

Проблема в том, что например, 'z' добираться до?. Как я могу это решить?

Thx для справки.

+3

-1 домашнее задание вопрос –

ответ

4

Это потому, что следующие символы после 'z' являются символами пунктуации и так далее. Вы можете сдвинуть так, чтобы, например, 'z' будет 'n'.

toEncode[i] = (toEncode[i] + 13 - (int)'a') % 26 + (int)'a'; 
+0

Я знаю, что эта тема была здесь уже довольно давно, но я подумал, что стоило бы опубликовать это в любом случае для будущей ссылки. Я думаю, что у вас есть опечатка в вашей формуле. Разве это не будет ...% 26 ... вместо 25? Поскольку мы хотим, чтобы «z» переместился на «a», а не на «b». – cottonman

+0

О, да, вы правы. Я ошибочно полагаю, что алфавит состоит из 25 букв. – pepyakin

0
System.out.println(('z'+ (char)13)); //output -135 
System.out.println((char)('z'+ (char)13)); //output - ? 
+0

@ Chandra Sekhar: Спасибо за ответ: Пожалуйста, добавьте пояснения и руководящие указания по вопросам «домашнее задание». – Jayan

0

Если расчетный символ больше последней буквы (г => 122 или Z => 90) лишь вычитать значение последнего письма от расчетной величины. Вы находите эти номера по всему Интернету, например. here.

Смежные вопросы