Не могу понять, что не так с моим методом 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
не был инициализирован, компилятор предупредил бы о его использовании.