0

Captain 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;
    }
}
4

2 回答 2

1

这是因为如果 for 循环的长度为 0,则没有输出值。因此,如果长度 == 0,那么当您尝试返回时,将永远不会设置输出。

通过执行以下操作修复它:

String output="";

此外,您仅将输出设置为一个字符串,每次循环时都需要附加到它,而不是将其设置为全新的值:

output += String.valueOf((char)(c));

确实,您最好使用 aStringBuilder来解决此问题。

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 是不可变的,必须为每个连接创建新的)。

于 2013-12-22T14:23:37.570 回答
0

在您的编码方法中,唯一的分配output是在 for 循环中。由于编译器无法 100% 确认 for 循环将运行(由于在条件中使用了变量),因此变量可能output会在未初始化的情况下返回,这是编译器禁止的。

从逻辑上讲,当将空字符串传递给encode()方法时会发生这种情况(因为长度 = 0 并且 0 不小于 0 [在 for 循环的条件中])。

为了解决这个问题,给output例如null或一个空字符串分配一个初始值:

String output = null;

或者

String output = "";

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

于 2013-12-22T14:37:55.313 回答