Ява Цезарь Сдвиг - PullRequest
       13

Ява Цезарь Сдвиг

0 голосов
/ 19 сентября 2018

Я пытался написать простой Цезарь Сдвиг на Java, который предполагает, что пользователь будет вводить только заглавные буквы без пробелов.А становится Z, B становится Y и так далее.Мне нужно научиться делать это самостоятельно, поэтому, пожалуйста, не пишите код для меня, просто подтолкните меня в правильном направлении.Вот фрагмент моего кода, который вызывает проблемы, я думаю.

System.out.print("Please enter you word: ");
        String code = in.nextLine();
        for (int i=0; i < code.length(); i++){
            System.out.print ((char)(code.charAt(i)+'A'+26) %26 );

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Я не уверен, что A to Z, B to C соответствует Цезарскому сдвигу, не так ли?

Давайте возьмем пример из Википедии , сдвиг влево на 3 места или, что эквивалентно, вправосмещение на 23 позиции:

Plain:    ABCDEFGHIJKLMNOPQRSTUVWXYZ
Cipher:   XYZABCDEFGHIJKLMNOPQRSTUVW

Чтобы получить позицию зашифрованного символа, мы добавляем правый сдвиг 23 к позиции простого символа.Это нормально для A,B,C, но к моменту достижения D мы уже вышли за пределы алфавита.Чтобы исправить это, нам нужно «обернуть» начало, и техника для этого заключается в использовании оператора по модулю (%) с модулем, равным количеству элементов, в данном случае 26. Вы сказали, что просто хотелитолкни, надеюсь, этого достаточно, но не слишком много информации.

Еще один момент.Вы говорите, что код выводит 0 для 'A', 1 для 'B' и т. Д. При вводе 'A' ваш код эквивалентен:

 System.out.print ((char)('A'+'A'+26) % 26) 

'A' имеет целочисленное значение65, так что это эквивалентно:

System.out.print ((char)(65+65+26) % 26)

Вы приводите (65+65+26) к char, но затем оператор % с операндом int (26) создаетint, так что вы на самом деле печатаете:

System.out.print (0)

После того, как вы отработали правильное expression для Цезаря, вам нужно привести результат обратно к (char) при печатиэто, как в:

System.out.print ((char)(expression))

В противном случае вы получите int значение выражения.

0 голосов
/ 19 сентября 2018

Чтобы использовать % 26, вы должны убедиться, что ваши данные находятся в пределах интервала 0..25.A должно быть 0, Z должно быть 25. Представьте, первый символ - B.То, что вы делаете, это (B+A+26)%26 - это просто не имеет смысла.

Чтобы исправить это

  1. Подумайте, как сделать 0 из A, 1 из B и т. Д.
  2. Подумайте, как сместить 0 в 25, 1до 0, от 2 до 1 и т. д.
  3. Подумайте, как сделать A из 0, B из 1 и т. д.
...