0

コンピュータサイエンスクラスの入門用にシーザー暗号を作成していますが、行き詰まっています。スペースなど、プロジェクトに必要な要素のいくつかを満たす方法をすでに理解しており、暗号化キーが固定数に設定されているときに機能していました。ただし、要件の 1 つは、"z" を押したときにアルファベットが折り返されることと、ユーザーが独自の暗号化キーの値を入力できることです。また、メッセージの暗号化と復号化も必要です。私が間違っている場所について誰かが私に与えることができるヒントは大歓迎です! これが私がこれまでに持っているものです:(私はEclipseでこれを作っていました)

import java.util.Scanner;

public class CaesarCipher {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("What is the message? (all lowercase)");
        String plainText = keyboard.nextLine();

        System.out.println("Please enter the encryption key: ");
        int encryptionKey = keyboard.nextInt();

        System.out.println("The encrypted text is: ");
        int charPos = 0;

        while (charPos < plainText.length()) {
            char currChar = plainText.charAt(charPos);
            int charAsNum = (int) currChar;
            int cipherLetterAsNum = charAsNum + encryptionKey;
            char cipherLetter = (char) cipherLetterAsNum;

            if (currChar == 'x' || currChar == 'y' || currChar == 'z') {
                currChar = plainText.charAt(charPos);
                charAsNum = (int) currChar;
                cipherLetterAsNum = charAsNum + encryptionKey - 26;
                cipherLetter = (char) cipherLetterAsNum;
                System.out.print(cipherLetter);
                charPos = charPos + 1;
            }

            if (currChar == ' ') {
                System.out.print(currChar);
            } else {
                System.out.print(cipherLetter);
            }
            charPos = charPos + 1;
        }
    }
}
4

1 に答える 1

0

encryptedChar が 91 (z の ascii 値) より大きいかどうかを確認する必要があると思います。大きい場合は、26 を減算する必要があります。テキストを復号化する場合は、encryptionKey を減算するだけで、encryptedChar の場合が 65 (a の ascii 値) より小さい場合は、26 を追加する必要があります。ascii 値が正しいかどうかわからないので、よく調べてください。

于 2015-09-26T21:54:13.113 に答える