Имеется задача на шифрование, где каждый из входящих в строку символов английского алфавита надо заменить на его "зеркальный", т.е. такой же по номеру с конца - a→z, b→y, c→x, ... x→c, y →b, z→a.
Попробовал сделать это без массивов или списков, через строки - в результате замена работает только для последней части алфавита, т.е. символы с n по z меняет на нужные, а символы с a по m - нет, оставляя их в первозданном виде.
public class Main {
public static void main(String[] args) {
String alphabet = "abcdefghijklmnopqrstuvwxyz";
Scanner scanner = new Scanner(System.in);
String initialPhrase = scanner.nextLine().trim();
String encryptedPhrase = "";
for (int i = 0; i < initialPhrase.length(); i++) {
encryptedPhrase += String.valueOf(encrypt(initialPhrase.charAt(i), alphabet));
}
System.out.println(encryptedPhrase);
}
public static char encrypt(char ch, String str) {
for (int i = 0; i < str.length(); i++) {
if (ch == str.charAt(i)) {
ch = str.charAt(str.length() - i - 1);
}
}
return ch;
}
}
Кто-нибудь может объяснить, почему метод encrypt(ch, str) срабатывает только для второй половины алфавита?
for (int i = 0; i < str.length(); i++) {
if (ch == str.charAt(i)) {
ch = str.charAt(str.length() - i - 1);
}
}
Необходимо реализовать выход из цикла после того, как значение переменной ch было обновлено, иначе для первой половины оно меняется дважды (туда и обратно).
Продвижение своими сайтами как стратегия роста и независимости