船长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/

10-10 08:10