Java ROT13/克朗奇船长继续

Java ROT13/克朗奇船长继续,java,loops,rot13,Java,Loops,Rot13,Captain Crunch解码环的工作原理是将每个字母放入一个字符串中,然后加上13。例如,“a”变成“n”,而“b”变成“o”。字母“环绕”在末尾,因此“z”变成“m” 这是我从别人的评论中编辑后得到的,但现在它一直告诉我输出可能还没有初始化,我不知道为什么。。。还有什么我需要在我的程序中修复的吗 在本例中,我只关心小写字符的编码 public class captainCrunch{ 公共静态void main(字符串[]Args){ 扫描仪sc=新的扫描仪(System.in); 字符串

Captain Crunch解码环的工作原理是将每个字母放入一个字符串中,然后加上13。例如,“a”变成“n”,而“b”变成“o”。字母“环绕”在末尾,因此“z”变成“m”

这是我从别人的评论中编辑后得到的,但现在它一直告诉我输出可能还没有初始化,我不知道为什么。。。还有什么我需要在我的程序中修复的吗

在本例中,我只关心小写字符的编码

public class captainCrunch{
公共静态void main(字符串[]Args){
扫描仪sc=新的扫描仪(System.in);
字符串输入;
系统输出打印(“获取输入”);
System.out.println(“请输入单词:”);
输入=sc.next();
系统输出打印(“”);
系统输出打印(“过账输出”);
系统输出打印(“编码”+输入+”结果为:“+编码(输入));
}//干管末端
/*
*
*/
公共静态字符串编码(字符串输入){
System.out.print(input.length());
int length=input.length();
整数指数;
字符串输出;
字符c;
字符串temp=“”;
对于(索引=0;索引<长度;索引++){
c=输入字符(索引);

如果(c>='a'&&c='n'&&c这是因为如果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输出=新建StringBuilder();
对于(索引=0;索引<长度;索引++){
c=输入字符(索引);

如果(c>='a'&&c='n'&&c在编码方法中,
输出的唯一赋值在for循环中。由于编译器无法100%确认for循环将运行(由于在条件中使用了变量)存在一种可能性,即未初始化就返回变量
output
,这是编译器所禁止的

从逻辑上讲,当一个空字符串被传递到
encode()
方法中时,就会发生这种情况(因为length=0且0不小于0[在for循环的条件下])

要解决此问题,请将初始值分配给
输出
,例如
,或者将空字符串分配给输出

String output = null;


您选择的解决方案将取决于如果该方法接收到空字符串,您打算返回什么。

OP从不执行
output+=
或对未初始化的
output
执行任何操作。好的一点,这解释了我删除后的原始答案的第一行,一秒钟。
String output = null;
String output = "";