#java #algorithm #caesar-cipher
#java #алгоритм #caesar-cipher
Вопрос:
Напишите алгоритм, который выводит строку без пробелов, используя алгоритм caesar-cipher, в coderunner. Упомянутая лектором строка = «» не добавляет пробелов, потому что символ ASCI 32 добавляет пробел к строке. Я не знаю, как реализовать это в коде, потому что запутался со строкой.концепция длины и как использовать str = в этом коде. ввод encrypt2(«мы люди», 2) вывод: ctgygjwocp ?
public class Tester {
public String encrypt(String plainText, int offset) {
String cipher = new String("");
char[] arr = plainText.toCharArray();
for (int i = 0; i<arr.length; i ){
int numericalVal = (int) arr[i];
if(Character.isUpperCase(arr[i])) {
cipher = (char) (((numericalVal offset-65) %26) 65);
} else if (numericalVal == 32){
cipher =arr[i];
} else {cipher = (char) (((numericalVal offset-97) %26) 97);
}
}
return cipher;
}
public static void main(String[] args) {
String cipher ="";
system.out.println("are we human") }
}
Комментарии:
1. Всякий раз, когда вы не уверены в назначении, ваше первое средство — всегда спросить инструктора. Вы платите за обучение не просто так. Люди здесь могут только догадываться, что происходит. Вам нужно предположение или окончательный ответ?
2. Я бы попросил помощников преподавателя TA. В некоторых колледжах его нет. Чтобы уточнить мой код. Code Runner не может принимать имя класса или раздел аргументов метода. Code runner может принимать только раздел public String — Return . Программа Code Runner уже предоставляет входные данные, поэтому мне пришлось имитировать coderunner в Eclipse.
Ответ №1:
public static String encrypt(String plainText, int offset) {
String cipher = "";
char[] arr = plainText.toCharArray();
for (char c : arr) {
if (Character.isUpperCase(c)) {
cipher = (char) (((c offset - 65) % 26) 65);
} else if (c == 32){
cipher =""; //<---- append nothing if space
} else {
cipher = (char) (((c offset - 97) % 26) 97);
}
}
return cipher;
}
Вы также можете выполнить plainText = plainText.replaceAll(» «, «»); и вам не придется проверять наличие символа 32.
public static String encrypt(String plainText, int offset) {
String cipher = "";
plainText = plainText.replaceAll(" ", "");
char[] arr = plainText.toCharArray();
for (char c : arr) {
if (Character.isUpperCase(c)) {
cipher = (char) (((c offset - 65) % 26) 65);
} else {
cipher = (char) (((c offset - 97) % 26) 97);
}
}
return cipher;
}