Caeasar Cipher with java's acm

Viewed 1112

The code below encrypts a word or sentence in the way Caesar did. You put the shift value and the program takes each letter of the word/sentence and "moves" in the alphabet acoording to the shift (key) value. But this is not the problem. I found the code on the internet and i cannot explain some of it's lines. I know how it works but i need some specific answer about some of it's lines. Here is the code:

import acm.program.*;

public class CaesarCipher extends ConsoleProgram {

public void run() {
    println("This program implements a Caesar cipher.");
    int key = readInt("Character positions to shift: ");
    String plaintext = readLine("Enter a message: ");
    String ciphertext = encodeCaesarCipher(plaintext, key);
    println("Encoded message: " + ciphertext);
}


private String encodeCaesarCipher(String str, int key) {
    if (key < 0) key = 26 - (-key % 26);
    String result = "";
    for (int i = 0; i < str.length(); i++) {
        char ch = str.charAt(i);
        if (Character.isLetter(ch)) {
            if (Character.isUpperCase(ch)) {
                ch = (char) ('A' + (ch - 'A' + key) % 26);
            }
            else {
                ch = (char) ('a' + (ch - 'a' + key) % 26);
            }
        }
        result += ch;
    }
    return result;
}
}

What exactly do those lines mean, and how do they do what they do?

ch = (char) ('A' + (ch - 'A' + key) % 26);

and

ch = (char) ('a' + (ch - 'a' + key) % 26);
2 Answers
Related