Виженер Java Ошибка

168
20 ноября 2017, 17:42

Пытаюсь сделать шифр Виженера, но в коде:

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)

Помогите понять, что не так и как лучше всего реализовать шифрование и дешифрование.

Answer 1

Я не знаю, что вы хотите сделать, но ошибка тут возникает вполне закономерно. 1.Вы создаете переменную String code = new String(), разумеется она пустая, потом получаете из нее массив чаров coder.Coder(text.toCharArray(), key.toCharArray(), code.toCharArray()) и передаете их в аргументы метода Coder. А в этом методе вы выполняете coString[k] = (char)(orString[k] + key[k]), где пытаетесь в цикле получить значение из массива orString, который , как я говорил выше, пустой в любом случае. Соответственно, вы вылетаете за пределы массива и получаете ошибку.

READ ALSO
Как расположить Alert в углу экрана

Как расположить Alert в углу экрана

хочу чтобы было вот так, но не получается

171
Работа с интерфейсом Map

Работа с интерфейсом Map

Добрый день, подскажите пожалуйста, никак не могу справиться с задачкойЕсть HashMap с данными,

176
Java проблема с DriverManager.getConnection(&hellip;)

Java проблема с DriverManager.getConnection(…)

Здравствуйте, возникла проблема с тем, что я делаю war проект, и возникает проблема при запуске Tomcat с DriverManagergetConnection(

164