Не могу понять, что не так с моим методом Rot-13

Я изменил это вокруг много. И это только ухудшается. Я не могу понять, что я делаю неправильно. От AM, добавь 13. От MZ, вычти 13. Прежде, по крайней мере, я получал ответные письма. Теперь они символы.

import javax.swing.JOptionPane;

public class ExerciseE {

    public static String rot13(String s) {
        char value = 0;
        char position = s.charAt(0);
        String rev = "";

        for (int i = 0; i < s.length(); i++) {
            position = s.charAt(i); 
            if (position >= 65 && position <= 77) {
                value = (char) (position + 13);
            }
            if (position >= 78 && position <= 90) {
                value = (char) (position - 13);

            } else {
            }
            rev = (rev + value);

        }
        return rev;
    }

    public static void main(String[] args) {
        String s = JOptionPane.showInputDialog("Enter a phrase or sentence:");
        s = s.toUpperCase();
        System.out.println(rot13(s));     
    }

}

2 ответа

Решение

Вы добавляете / вычитаете из value не позиция...

value = (char) (value + 13);

Должно быть, должно быть

value = (char) (position + 13);

И то же самое касается вычитания

Вам нужно использовать position + 13 скорее, чем value + 13и аналогичные для случая вычитания.

Более общая картина заключается в том, что вы никогда не должны инициализировать локальную переменную, не зная, почему ее нужно инициализировать. Обычно компилятор может видеть, что каждый путь, ведущий к использованию переменной, проходит через присваивание. Если value не был инициализирован, компилятор предупредил бы о его использовании.

Другие вопросы по тегам