0

(編集済み)

私の問題文: String の各文字に 13 文字を追加して、メソッドに渡された String をエンコードするメソッドを作成します。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.

簡単な説明/回答に注意してください...

* * *だから今私の問題は、出力変数が初期化されていない可能性があると私に言い続けることです

4

2 に答える 2

0

output変数を空の文字列として初期化する必要があります。outputさらに、変数の内容を、エンコードしたばかりの最後の文字に常に置き換えています。したがって、すべての文字を の代わりにoutputwithに追加する必要があります。+==

したがって、ここに固定ソリューションがあります:

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 を使用してください。

于 2014-01-23T15:34:13.980 に答える
0

このコードは最もパフォーマンスが高いわけではありませんが、大文字と小文字でうまく機能します。

こんにちは → uRyYb

パイ → CVR

本→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;
}
于 2014-01-23T15:41:31.157 に答える