Не получается выполнить задание, условие которого следующее: ТРАНСПОЗИЦИЯ С ФИКСИРОВАННЫМ ПЕРИОДОМ: В этом случае сообщение делится на группы символов длины d и к каждой группе применяется одна и та же перестановка. Эта перестановка является ключом; она может быть задана некоторой перестановкой первых d целых чисел. Таким образом, для d=5 в качестве перестановки можно взять: 23154. Это будет означать, что:m1 m2 m3 m4 m5 m6 m7 m8 m9 m10...переходит в:m2 m3 m1 m5 m4 m7 m8 m6 m10 m9
Попробую объяснить более подробно (моё понимание данной задачи): Вводится ключ, например 54231, элемент 5 становится на место 1, элемент 4 на место второго, элемент 2 на место третьего, элемент 3 на место четвёртого, элемент 1 на место пятого. То есть в данном случае строка шифруется по 5 символов (если бы ключ был, к примеру 4231, она бы шифровалась по 4 символа), когда программа доходит до 6 символа в строке, начинается следующая пятёрка, соответственно уже десятый элемент должен становится на место шестого, девятый на место седьмого, седьмой на место восьмого и так далее. У меня получилось выполнить перестановку первой пятёрки, после чего возникла ошибка, что не так, я понять не смог
Подскажите, пожалуйста, что мне нужно сделать, чтобы программа заработала.
public class Class2 {
public static void main(String[] args) {
String d= "I want to walk my cat";
Class2 class2 = new Class2();
int p = 45321; // ключ для замены элементов местами
String sy = p+"";
int [] mass = new int[sy.length()];
for (int i=mass.length-1;i>=0;i--){
mass[i]=p%10;
p=p/10;
}
class2.transposal(d,mass);
}
private String transposal(String s,int [] key){
char ch [] = s.toCharArray();
String res="res";
int st = ch.length;
int k=0;
int p=key.length;
char [] mass = new char[ch.length];
for (int i=0;i<mass.length;i++){
mass[i]=ch[key[i]-1];
System.out.println(mass[i]);
k++;
if (k>=key.length){ //возможно >=
p+=key.length;
if (p>=mass.length){
break;
}
for (int j=0;j<key.length;j++){
key[j]+=key.length;
}
k=0;
}
}
return res;
}
}
Программа должна шифровать целиком всю строку, а не отдельные её слова
Попробуйте таким способом... Обратите внимание на строку final Character charByPosition = getCharByPosition(charArray, pos-1); Дело в том, что в вашем ключе 45321 нет цифры 0, соответственно, я полагаю, что позиции в ключе нумеруются с 1, а не с 0, в то время как в массиве и коллекциях нумерация с ноля. Поэтому переменная уменьшается на 1 : pos-1. Если все таки нумерация в ключе с ноля, то стоит вместо pos-1 записать pos Удачи
public class Class2 {
public static void main(String[] args) {
final String phrase = "I want to walk my cat";
int key = 45321; // ключ для замены элементов местами
final String result = getCharByPosition(phrase.toCharArray(), getArrayFromInt(key));
System.out.println(result);
}
private static List<Integer> getArrayFromInt(int key){
final List<Integer> keyArray = new ArrayList();
while (key>0){
keyArray.add(key%10);
key=key/10;
}
Collections.reverse(keyArray);
return keyArray;
}
private static String getCharByPosition(char[] charArray, List<Integer> position) {
final StringBuilder sb = new StringBuilder();
int counter = 0;
while (counter < charArray.length) {
for (int pos : position) {
final Character charByPosition = getCharByPosition(charArray, counter+pos-1);
if (charByPosition != null) sb.append(charByPosition);
}
counter = counter + position.size();
}
return sb.toString();
}
private static Character getCharByPosition(char[] charArray, int position){
return charArray.length<=position ? null : charArray[position];
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Вопрос такой: Как подключить несколько БД к Spring Boot?
Сколько бы примеров и полей с датами на Java я не видел, всегда (или почти всегда) используют класс DateПри этом, я думаю, всем известно, что класс...
У меня есть простой браузерМне надо чтобы в нём открывались ссылки, как например в Google Chrome