Member 13765313 Ответов: 5

Почему я получаю ошибку в своем коде?


У меня есть два массива arr для 6 значений str,dex,con,int,wis,cha и строковый массив 'attr' для этих 6 атрибутов.для каждых 6 значений я пытаюсь получить общее количество четырех чисел, которые пользователь вводит и отбрасывает минимум из общего числа.но когда я запускаю программу, я получаю ошибку "ArrayIndexOutOfBoundsException", когда я пытаюсь ввести 4 значения для целого числа wis, которое является последним из массива arr.

Что я уже пробовал:

<pre>public static int[] diceTotal(){
        for(int i=0;i<arr.length;i++){
            int sum=0;
            int[] value = {0,0,0,0};
            for (int j=0;j<value.length;j++){
                out.println("Enter " + attr[i] + " value:");
                value[i] = GetAnIntegera();
                while ((value[i] < 1) || (value[i] > 6)) {
                    out.println("Invalid Attribute value. Enter again.:");
                    value[i] = GetAnIntegera();
                }
            }
            int min=value[0];
            for(int k=0;k<value.length-1;k++){
                if(value[i]<min){
                    min=value[i];
                }
            }for (int l=0;l<value.length;l++){
                sum+=value[i];
            }arr[i]=sum-min;
        }
        return arr;}

5 Ответов

Рейтинг:
1

OriginalGriff

Потому что вы используете i нет j чтобы получить доступ к массиву value - а с тех пор i варьируется от 0 до количества элементов в системе. arr есть вероятность, что arr больше value

В таких случаях используйте отладчик - он может точно показать вам, что происходит, и помочь вам выяснить, почему это происходит намного быстрее и проще, чем спрашивать здесь...


Рейтинг:
0

Aydin Homay

Привет,

Первый:
Пожалуйста, имейте в виду, что массивы в языках C и C, основанных на C# или Java, начинаются с 0, поэтому фактическая длина массива всегда равна длине -1, поэтому вам нужно перекодировать свои циклы на основе этого предположения.

Второй:
Старайтесь избегать доступа к различным массивам из нерелевантного индексатора, например, используя j для доступа к i или наоборот.

Третий:
Вы предполагаете, что длина "arr" всегда будет равна длине "value", это не чистый код.

BR,
А. Х.


Рейтинг:
0

Dirk Bahle

Получаемое вами исключение ArrayIndexOutOfBoundsException должно указывать строку, в которой возникает исключение (см. StackTrace). Вы также должны настроить параметры отладки исключений в VS
(видеть Новое окно настроек исключений в Visual Studio 2015 – блог Microsoft DevOps[^] ) для остановки при возникновении исключения.

Это должно позволить вам увидеть в режиме отладки, где и почему вы получаете это исключение.


Рейтинг:
0

CPallini

Цитата:
for(int i=0;i<arr.length;i++){
int sum=0;
int[] value = {0,0,0,0};
for (int j=0;j<value.длина;j++){
из.код println("введите" + м[Я] + " значение:");
значение[i] = GetAnIntegera();


С i=0..5, вы не можете индексировать value с ним.


Рейтинг:
0

Patrice T

Ваши петли используют i, j, k, l как счетчики, но ваш код использует только i.
И с тех пор i зависит от массива arr размера 6 и вы используете его для доступа к массиву value из размера 4 вы в конечном итоге пытаетесь получить доступ к Пятому элементу value- которого не существует.