【问题标题】:Captain crunch - ROT13 encoder programCaptain Crunch - ROT13 编码器程序
【发布时间】:2013-12-20 11:09:50
【问题描述】:

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

这是我从 peoples cmets 编辑后得到的,但现在它一直告诉我输出可能尚未初始化,我不知道为什么......还有什么我需要修复的在我的程序中?

在这种情况下,我只关心小写字符的编码

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”的算法。您可以在这里找到一个基本示例:introcs.cs.princeton.edu/java/31datatype/Rot13.java.html 只需将 System.print 调用替换为您的字符串(或更好的 stringBuilder)就可以了。
  • 您希望用大写字母与小写字母发生什么变化?尽管您可以通过这种方式转换chars(并且可能适用于这样的作业),但除了空格中的字母之外,还有其他东西 - 数字、标点符号、一些重音字符、“空白”(制表符、空格等)。所以,你需要弄清楚你的有效范围的开始和结束是什么。您可能需要模运算符 (%)。您还必须点击字符串中的每个字符,因此您需要某种循环...

标签: java string encode


【解决方案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();
}

我还没有实现“包装”,因为它取决于您需要支持的情况(上限或下限)等。基本上您需要做的就是查看 c 的范围,然后加或减 13取决于它在 ASCII 字符集中的位置。

【讨论】:

  • 我知道官方名称是ROT13,我知道它是Caesar Cipher 的实现,但是拜托拜托我们可以称之为CCDR(Captain Crunch解码环)算法。
  • 既然你说了拜托,以后就叫CRCCDR(Chris' Requested Captain Crunch Decoder Ring)算法。
  • 我错过了关于船长紧缩的事情吗?
【解决方案2】:

您没有任何循环遍历字符串的字符。您必须将其他字符串从0 迭代到string.length()

【讨论】:

    【解决方案3】:

    输出可能尚未初始化:

    String output = "";
    

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

    【讨论】:

      最近更新 更多