Reputation: 49
The Captain Crunch decoder ring works by taking each letter in a string and adding 13 to it. For example, 'a' becomes 'n' and 'b' becomes 'o'. The letters "wrap around" at the end, so 'z' becomes 'm'.
This is what I've got after editing it a bit from peoples comments, but now it keeps telling me that output may have not been initialized and I have no clue why... also is there anything else I need to fix in my program?
In this case, I am only concerned with encoding lowercase characters
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;
}
}
Upvotes: 4
Views: 1073
Reputation: 2052
The output may have not been initialized:
String output = "";
If you don't put = ""
then you have never initialized it (it's essentially random garbage, so the compiler won't let you do it).
Upvotes: 0
Reputation: 41188
It's called ROT13 encoding.
http://en.wikipedia.org/wiki/ROT13
To fix your algorithm you just need:
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();
}
I haven't implemented the "wrapping" since it depends on what case you need to support (upper or lower) etc. Essentially all you need to do though is look at the range of c and then either add or subtract 13 depending on where it is in the ASCII character set.
Upvotes: 1
Reputation: 19050
You don't have any loop iterating over the character of your string. You have to iterate other the string from 0
to string.length()
.
Upvotes: 0