2013-12-20 4 views
4

Кольцо декодера Captain Crunch работает, беря каждую букву в строке и добавляя к ней 13. Например, «a» становится «n», а «b» становится «o». Буквы «обертываются» в конце, поэтому «z» становится «m».Капитан-хруст - программа-кодировщик 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' таким образом (и, вероятно, работает для такого назначения, как это), в пробеле есть вещи, кроме букв - числа, знаки препинания, некоторые символы с акцентом,« пробелы »(вкладки, пробелы и т. Д.). Итак, вам нужно выяснить, что означает начало и конец вашего допустимого диапазона. Вам может понадобиться оператор modulo ('%'). Вы также должны ударить каждого символа в строке, так что вам понадобится какой-то цикл ... –

ответ

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, а затем либо добавить, либо вычесть 13 в зависимости от того, где он находится в наборе символов ASCII.

+0

Я знаю, что официальное название 'ROT13', и я знаю, что это реализация« Caesar Cipher », но * пожалуйста, пожалуйста пожалуйста * можно назвать это алгоритмом CCDR (Captain Crunch Decoder Ring). **Пожалуйста**. – christopher

+1

Поскольку вы сказали, пожалуйста, отныне он должен быть известен как CRCCDR (Крис «Запрашиваемый капитан Crunch Decoder Ring»). –

+0

Ура! +1 для вас хороший сэр. – christopher

0

Выход может быть не инициализирован:

String output = ""; 

Если вы не ставите = "", то вы никогда не инициализируются его (это по существу случайный мусор, так что компилятор не позволит вам это сделать).

Смежные вопросы