user3122464
user3122464

Reputation: 49

Captain crunch - ROT13 encoder program

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

Answers (3)

Jamie Pate
Jamie Pate

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

Tim B
Tim B

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

Manuel Selva
Manuel Selva

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

Related Questions