Закодировать строку, переданную в метод и добавить 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;
}
Другие вопросы по тегам