(修改)
我的问题陈述:编写一个方法,通过向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 直截了当的解释/答案将非常感谢......
* * *所以现在我的问题是它一直告诉我输出变量可能没有被初始化
答案 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;
}