Пытаюсь сделать шифр Виженера, но в коде:
import java.util.Scanner;
import javax.swing.Spring;
public class Main {
public static void main(String[] args) {
int func;
String alphabet = new String(); //алфавит
String code = new String(); //кодированное сообщение
String key = new String(); //ключ
String text = new String(); //исходное сообщение
Scanner sc = new Scanner(System.in);
AlphChck check = new AlphChck();
Coder coder = new Coder();
boolean answer, swFlag = false;
System.out.println("Введите перемешанный алфавит(английский):");
do {
alphabet = sc.nextLine();
answer = check.Correct(alphabet);
if (answer) {
break;
}else System.out.println("Неверный алфавит! Введите заново:");
}while(answer != true);
System.out.println("Введите фразу:");
text = sc.nextLine();
System.out.println("Введите ключ:");
key = sc.nextLine();
System.out.println("Выберите функцию:");
System.out.println("1)Зашифровать");
System.out.println("2)Дешифровать");
func = sc.nextInt();
do {
switch (func) {
case 1:
coder.Coder(text.toCharArray(), key.toCharArray(), code.toCharArray());
swFlag = true;
break;
// case 2:
//
// swFlag = true;
// break;
default:
System.out.println("Нет такого выбора! Выберите из предложенных:");
func = sc.nextInt();
swFlag = false;
}
}while(!swFlag);
}
}
class AlphChck {
boolean Correct(String a){
if (a.length() == 26) {
return true;
} else return false;
}
}
class Coder {
public void Coder(char[] orString, char[] key, char[] coString) {
int i = 1, k = 1;
do {
for ( ;k <= key.length; k++) {
if (i <= orString.length) {
coString[k] = (char)(orString[k] + key[k]);
i++;
}
}
}while(i > orString.length);
System.out.println("Зашифрованное сообщение: " + coString);
}
}
Выдает ошибку:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Coder.Coder(Main.java:81)
at Main.main(Main.java:41)
Помогите понять, что не так и как лучше всего реализовать шифрование и дешифрование.
Я не знаю, что вы хотите сделать, но ошибка тут возникает вполне закономерно. 1.Вы создаете переменную String code = new String()
, разумеется она пустая, потом получаете из нее массив чаров coder.Coder(text.toCharArray(), key.toCharArray(), code.toCharArray())
и передаете их в аргументы метода Coder. А в этом методе вы выполняете coString[k] = (char)(orString[k] + key[k])
, где пытаетесь в цикле получить значение из массива orString, который , как я говорил выше, пустой в любом случае. Соответственно, вы вылетаете за пределы массива и получаете ошибку.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Добрый день, подскажите пожалуйста, никак не могу справиться с задачкойЕсть HashMap с данными,
Здравствуйте, возникла проблема с тем, что я делаю war проект, и возникает проблема при запуске Tomcat с DriverManagergetConnection(