Как l oop вернуться к началу строки? Гиперскилл, шифрование - дешифрование - PullRequest
0 голосов
/ 15 января 2020

я выполняю проект Hyperskill Encryption - Decryption, описание ниже , и я столкнулся с проблемой. Например, он работает нормально, если я пытаюсь зашифровать букву = ключ = 1, вывод будет: б. но он не будет работать, если буква = z, ключ = 1, метод должен l oop вернуться к началу алфавита, и вывод должен быть a. Вопрос в том, как сделать мой метод l oop обратно в начало, если он должен это сделать?

Описание проекта:

Напишите программу, которая считывает из стандартного ввода сообщение Engli sh и целое число (ключ) и сдвигает каждую букву на указанное число в соответствии с их порядком в алфавите. Если вы достигли конца алфавита, начните с начала (a следует за z).

Алфавит Engli sh находится ниже: abcdefghijklmnopqrstuvwxyz

Программа не должна изменять не-буквы персонажи. Предполагается, что ключ означает, что если человек знает значение ключа, он или она сможет расшифровать текст, а если он или она не знает, он или она не сможет расшифровать текст. Это как настоящий ключ, который может открыть доступ к тексту сообщения.

public static void encrypt(String input, int key) {
        String output = "";
        String alphabet = "abcdefghijklmnopqrstuvwxyz";

        for (int i = 0; i < input.length(); i++) {
            String inputCharacter = Character.toString(input.charAt(i));
            if (inputCharacter.equals(" ")) {
                output += " ";
            }
            for (int j = 0; j < alphabet.length(); j++) {
                String alphabetCharacter = Character.toString(alphabet.charAt(j));
                String decryptedCharacter = Character.toString(alphabet.charAt(j) + key);

                if (inputCharacter.equals(alphabetCharacter)) {
                    output += decryptedCharacter;
                }

            }
        }
        System.out.println(output);


    }

1 Ответ

2 голосов
/ 15 января 2020

Вы можете использовать оператор по модулю %, чтобы "обернуть" большие индексы в длину строки:

String decryptedCharacter = Character.toString(alphabet.charAt((j + key) % alphabet.length()));

(Обратите внимание на парены: в исходном коде вы добавляли key в char, а не в индекс.)

Кроме того, вы можете использовать contains, чтобы проверить, есть ли символ в алфавите для обработки, например, пунктуация:

if (! alphabet.contains(inputCharacter)) {
     output += inputCharacter;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...