船长脆片 - ROT13编码程序

4
船长脆片解码器戒指的工作原理是将字符串中的每个字母加上13。例如,'a'变成'n','b'变成'o'。字母在末尾"环绕",所以'z'变成'm'。
经过一些编辑和人们的评论,这就是我得到的东西,但现在它一直告诉我输出未初始化,我不知道为什么...还有其他需要修复的地方吗? 在这种情况下,我只关心编码小写字符
import java.util.Scanner;

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

}

你正在尝试实现一个名为“rot13”的算法。你可以在这里找到一个基本的例子:http://introcs.cs.princeton.edu/java/31datatype/Rot13.java.html 只需将System.print调用替换为你的字符串(或更好的stringBuilder),你就可以开始了。 - STT LCU
你想怎样处理大写和小写字母?虽然您可以通过这种方式转换 char(并且可能适用于此类赋值),但是该空间中除了字母之外还有其他内容 - 数字、标点符号、某些带重音的字符、"空格"(制表符、空格等)。因此,您需要确定有效范围的开始和结束。您可能需要模运算符(%)。您还必须遍历字符串中的每个字符,因此您需要某种循环... - Clockwork-Muse
3个回答

1

它被称为ROT13编码。

http://en.wikipedia.org/wiki/ROT13

要修复你的算法,你只需要:
public static String encodeString (String input) {
    StringBuilder output = new StringBuilder();

    for (int i=0;i<input.length;i++) {
        char c = input.charAt(i)
        output.append(c+13); // Note you will need your code to wrap the value around here
    }

    return output.toString();
}

我还没有实现"wrapping",因为它取决于你需要支持哪种情况(大写或小写)等等。但基本上你只需要查看c的范围,然后根据它在ASCII字符集中的位置添加或减去13即可。


我知道它的官方名称是ROT13,也知道它是凯撒密码的一种实现,但是拜托拜托拜托,我们能不能称它为CCDR(Captain Crunch解码器环)算法。拜托了 - christopher
1
既然你说了请,从现在开始它将被称为CRCCDR(Chris请求的Captain Crunch解码器环)算法。 - Tim B
我有没有错过关于Captain Crunch的什么事情? - thermite

0

输出可能未被初始化:

String output = "";

如果你不加上= "",那么你就没有初始化它(它本质上是随机垃圾,所以编译器不会让你这样做)。


0

你没有任何循环迭代字符串中的字符。你必须从0string.length()迭代字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接