Почему я получаю сообщение об ошибке «java.lang.ArrayIndexOutOfBoundsException: индекс 5 выходит за границы для длины 5» для моего метода findPosition?

Первый класс, который дает мне ошибку. Я должен создать массив с буквами A-Z, а затем попросить пользователя ввести ключи, которые он принимает, и сравнить позицию каждого символа в массиве ключа с позицией введенной пользователем строки.

import java.util.*;
    public class Encrypt{
        private Square plain1;
        private Square plain2;
        private Square Encrypt1;
        private Square Encrypt2;

    public Encryption(String key1, String key2) {
        plain1 = new Square();
        plain2 = new Square();
        Encrypt1= new Square(key1);
        Encrypt2= new Square(key2);
    } 


    public String encrypt(String msg) {
        String EmpS = "";
        String STR = "";

        for(int i = 0; i < message.length(); i+=2){
            char iMsg = message.charAt(i);
            char iMsg2 = message.charAt(i+1);
            int[] posRay = plain1.findPosition(iMsg);
            int[] posRay2 = plain2.findPosition(iMsg2);
            String answer = "" + Encrypt1.getChar(posRay[0], posRay2[1]);
            String Combined = "" + answer;
            String answer2 = "" + Encrypt2.getChar(posRay2[0], posRay[1]);
            String Combined2 = "" + answer2;

            String BothCom = Combined + Combined2;
            STR = STR.concat(BothCom);

        return STR;
        }
        return STR;
    } 

2-й класс, отвечающий за массив

public class Square {
    private char[][] matrix;
public Square() {
        arr= new char[5][5];
        int ascii= 65;
        for (int i = 0; i < 5; i++){
            for(int j = 0; j < 5; j++){
                arr[i][j] = (char) ascii;
                ascii++;
                }
            }
        }
}
public int[] findPosition(char Chart) {
        int[] position= new int[2];
        position[0] = -1;
        popositions[1] = -1;
        for (int i = 0; i < 5; i++){
            for (int j = 0; i < 5; j++){
                if(matrix[i][j] == Chart){
                posistion[0] = i;
                position[1] = j;
                return position;
                }
            }
        }

Я получаю это как ошибку (все остальное работает), и я пытался изменить размер массива и настроить цикл for, но я все еще не уверен, почему я получаю сообщение об ошибке, в чем проблема?:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
    at Square.findPosition(Square.java:91)
    at Encrypt.encrypt(Encrypt.java:45)
    at IO.printResults(IO.java:101)
    at Lab.main(Lab.java:26)

Я предполагаю, что поле matrix было инициализировано размером <= 5 по крайней мере в одном из его измерений. --- Пожалуйста, редактировать пост и добавьте минимальный воспроизводимый пример.

Turing85 09.04.2022 16:24

Опубликуйте минимальный воспроизводимый пример, который компилируется. Мы не можем сказать, какие из ошибок, из-за которых он не компилируется, находятся в исходном коде.

Jon Skeet 09.04.2022 16:51
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
2
25
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

for (int j = 0; i < 5; j++){

Это должно быть j < 5. Условие i < 5 истинно и остается истинным независимо от того, как часто это повторяется, таким образом, вы получаете j = 5, а этот индекс не существует.

НБ: Я только предполагаю. Этот четко — это не тот код, который вы на самом деле написали, учитывая, что в нем масса опечаток и он не будет компилироваться без исправления все они.

В следующий раз вставьте фактический код, который вызывает реальную ошибку, а не... что бы здесь ни произошло. Вы вручную перепечатывали? Уф.

матрица поля не инициализирована. я имею в виду, где матрица была заполнена в классе Square? другое дело: что такое arr в конструкторе? теперь ты это узнаешь.

Другие вопросы по теме