船长Crunch解码器环的工作原理是将字符串中的每个字母加上13。例如,“ a”变为“ n”,“ b”变为“ o”。字母末尾“环绕”,因此“ z”变为“ m”。
这是我从人们的评论中进行一些编辑后得到的结果,但是现在它一直告诉我输出可能尚未初始化,我也不知道为什么...在我的程序中还有其他需要修复的内容?
在这种情况下,我只关心编码小写字符
public class captainCrunch {
public static void main (String[] Args) {
Scanner sc = new Scanner(System.in);
String input;
System.out.print("getting input");
System.out.println("please enter word: ");
input = sc.next();
System.out.print(" ");
System.out.print("posting output");
System.out.print("encoding" + input + " results in: " + encode(input));
}//end of main
/*
*
*/
public static String encode(String input){
System.out.print(input.length());
int length = input.length();
int index;
String output;
char c;
String temp = " ";
for (index = 0; index < length; index++) {
c = input.charAt(index);
if(c >= 'a' && c <= 'm'){
c += 13;
}else if(c >= 'n' && c <= 'z'){
c -= 13;
}
output = temp + (char)(c);
}
return output;
}
}
最佳答案
这是因为,如果for循环的长度为0,则没有输出值。因此,如果length == 0,则在尝试返回时将永远不会设置输出。
通过执行以下操作来修复它:
String output="";
此外,您仅将输出设置为一个字符串,每次循环时都需要将其追加,而不是将其设置为全新的值:
output += String.valueOf((char)(c));
确实,您最好使用
StringBuilder
。StringBuilder output = new StringBuilder();
for (index = 0; index < length; index++) {
c = input.charAt(index);
if (c >= 'a' && c <= 'm') c += 13;
else if (c >= 'n' && c <= 'z') c -= 13;
output.append((char)(c));
}
return output.toString();
对于这种事情,StringBuilder比String更有效(由于String是不可变的,因此必须为每个串联创建新的字符串)。
关于java - ROT13/上尉紧缩,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20730373/