The purpose of this assignment is to give you some practice using characters and Strings. A second purpose it to give you additional practice in using the Java API to find the methods you need. I will suggest some methods you might need at the bottom of this page.
The idea of a Caesar cipher is this: you encode a message by shifting each letter some number of places. Thus, if the shift is 2, then A becomes C, B becomes D, and so on. Like this:
Surprisingly, you can do this by simply doing arithmetic with characters, but you do need to reassure Java that the result is a character. If, for example, char letter contains the value 'A', then 'A' + 2 gives the integer result 67, which you can turn back into a character by saying (char)(letter + 2), giving the value 'C'.
Unfortunately, (char)('Z' + 2) does not give you the letter 'B' (you can see why from the picture above), but if you realize you went past 'Z', you can subtract 26 (so the result is 'Z' + 2 - 26, or 'Z' - 24), and this will give you 'B'.
This also means that if you encode a message with a shift of n, you can decode it with another shift of 26 - n.
Here's the assignment:
Download the main file here: CaesarCipherClient.java Download CaesarCipherClient.java // do not change the main. do not submit this file
main will pass the message and the key from the user to the cipher method.
The assignment is to write a method named cipher that takes two parameters, message and the key.
Start your assignment with the following lines in Cipher.java
public class Cipher {
public static void cipher(String message, int key) {
}
}
Convert all letters to a lowercase
Encode each letter by shifting it the right amount using the key, and display the encoded letters into a console window.
Encode each digit (0 ~ 9) with its ASCII value shifted by the negative value of the key (1 -> 49-key, 0-> 48-key), and display the encoded digits into a console window.
Skip all the punctuation marks, blanks, and anything else other than letters and digits and do NOT display them in a console window.
Required file/class name: Cipher.java to save the cipher method
Here's the sample output:
Your Message? Attack zerg at dawn!
Encoding Key? 3
Your message: dwwdfnchujdwgdzq
Your Message? 10 go forward
Encoding Key? 5
Your message: 4443ltktwbfwi
Useful methods you should look at:
Character.isLetter(char)
Character.isDigit(char)
Character.toUpperCase(char)
String.charAt(int)
String.length()
String.toUpperCase()
Recall that Java encodes characters as integers using ASCII: