Закодировать строку, переданную в метод и добавить 13
(Edited)
Моя постановка проблемы: напишите метод, который будет кодировать строку, передаваемую методу, добавляя 13 букв к каждому символу в строке. Если буква после добавления 13 превышает "z", то "обернуть" алфавит. Затем верните закодированную строку.
encodeString("hello") → "uryyb"
encodeString("pie") → "cvr"
encodeString("book") → "obbx"
это то, что я до сих пор:
public static String encodeString (String input) {
String output;
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (c >= 'a' && c <= 'm')
c += 13;
else if (c >= 'n' && c <= 'z')
c -= 13;
output= (" " + (c));
}
return output;
}
теперь я знаю, что должен создать счетчик, чтобы метод продолжал цикл до тех пор, пока не достигнет длины передаваемой строки... и я знаю, что если charAt(index) меньше символа 'n', то я добавить 13, и если оно больше, тогда я вычту 13. когда я все это сложу, хотя я просто запутался и просто получил кучу ошибок компиляции, таких как Type mismatch: cannot convert from int to String
,
обратите внимание на простые объяснения / ответы будут высоко ценится...
*** так что теперь моя проблема в том, что он продолжает сообщать мне, что моя выходная переменная, возможно, не инициализирована
2 ответа
Вы должны инициализировать свой output
переменная как пустая строка. Кроме того, вы всегда заменяете содержимое output
переменная с последним символом, который вы только что закодировали. Таким образом, вы должны добавить каждый символ к output
с +=
вместо =
,
Итак, вот фиксированное решение:
public static String encodeString(String input) {
String output = ""; // initialize as empty String
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (c >= 'a' && c <= 'm') {
c += 13;
} else if (c >= 'n' && c <= 'z') {
c -= 13;
}
output += " " + c; // add all chars to the String instead of replacing the whole String with "="!
}
return output;
}
Я немного украсил твой код, чтобы все могли видеть, что он на самом деле делает.
Используйте IDE!
Этот код не самый производительный, но хорошо работает с верхними и нижними символами.
HELLO → URyYb
pIe → cVr
BOK → OBBX
private static String encodeString(String string) {
char[] ret = new char[string.length()];
for (int i = 0; i < string.length(); i++) {
ret[i] = rot13(string.charAt(i));
}
return String.valueOf(ret);
}
public static char rot13(char c) {
if (Character.isLetter(c)) {
if (Character.compare(Character.toLowerCase(c), 'a') >= 0
&& Character.compare(Character.toLowerCase(c), 'm') <= 0)
return c += 13;
else
return c -= 13;
}
return c;
}