传递给方法&的编码字符串加13

时间:2014-01-23 14:27:58

标签: java string loops encode rot13

(修改)

我的问题陈述:编写一个方法,通过向String中的每个字符添加13个字母来对传递给该方法的String进行编码。如果添加13后的字母超过'z',则“环绕”字母表。然后返回编码的String。

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(索引)小于字符'n '我添加13,如果它更大,那么我减去13.当我把它放在一起虽然我只是感到困惑,只是得到一堆编译错误,如Type mismatch: cannot convert from int to String

note 直截了当的解释/答案将非常感谢......

* * *所以现在我的问题是它一直告诉我输出变量可能没有被初始化

2 个答案:

答案 0 :(得分:0)

您必须将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!

答案 1 :(得分:0)

此代码不是最具性能的,但适用于上下字符。

  

hElLo→uRyYb

     

pIe→cVr

     

bOoK→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;
}