2013-12-20 55 views
4

Captain Crunch解碼器環通過將字符串中的每個字母加上並添加13來工作。例如,'a'變成'n','b'變成'o'。字母在最後纏繞,所以'z'變成'm'。Captain Crunch - ROT13編碼器程序

這是我從人民的評論編輯它後有的,但現在它一直告訴我,輸出可能尚未初始化,我不知道爲什麼......還有什麼我需要的修復我的程序?

在這種情況下,我只關心與編碼小寫字符

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

} 
+0

你試圖實現一個名爲「rot13」的算法。你可以在這裏找到一個基本的例子:http://introcs.cs.princeton.edu/java/31datatype/Rot13.java.html只需將System.print調用替換爲你的字符串(或者更好的stringBuilder),你很好走。 –

+0

你想要在大寫還是小寫的情況下發生什麼?儘管你可以通過這種方式轉換'char'(並且可能適用於像這樣的任務),但除了空格中的字母之外還有其他內容 - 數字,標點符號,重音符號,「空格」(製表符,空格等)。所以,你需要弄清楚你的有效範圍的開始和結束是什麼。您可能需要模運算符('%')。你也必須擊中字符串中的每個字符,所以你將需要某種循環... –

回答

0

你不必在你的字符串中的字符任何環路迭代。您必須將其他字符串從0迭代到string.length()

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的範圍,然後根據它在ASCII字符集中的位置來增加或減少13。

+0

我知道官方名稱是'ROT13',我知道它是'Caesar Cipher'的實現,但請*請請*我們可以稱它爲CCDR(Captain Crunch Decoder Ring)算法。 **請**。 – christopher

+1

既然你說過,那麼此後它應該被稱爲CRCCDR(克里斯的請求隊長Crunch Decoder Ring)算法。 –

+0

萬歲!爲你+1好,先生。 – christopher

0

輸出可能尚未初始化:

String output = ""; 

如果你不把= ""那麼你從來沒有初始化它(這基本上是隨機的垃圾,所以編譯器不會讓你這樣做)。