Вычитание элементов массива в течение l oop (java .lang.ArrayIndexOutOfBoundsException) - PullRequest
0 голосов
/ 30 апреля 2020

Мне нужно вычесть:

(2 - 0) и (4 - 2).

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

Код вычитает, если «n» меньше, чем «(statues [statues.length-1])», что «4», поэтому следует остановиться на «2». Поэтому я не могу понять, почему я получаю эту ошибку:

java .lang.ArrayIndexOutOfBoundsException: Индекс 3 выходит за пределы длины 3

Действительно, если я напечатаю "c «Я вижу правильный результат, но, очевидно, он продолжает вычисляться, поскольку строка ошибки - это строка« c ».

Я изменил код на разные версии, и он работал, но в зависимости от чисел в массив, что-то пошло не так.

publi c class MakeArrayConsecutive2 {

public static void main(String[] args) {
    int[] statues = {0, 2, 4};
    makeArrayConsecutive2(statues);

}

public static int makeArrayConsecutive2(int[] statues) {    
    Arrays.sort(statues);
    int count = 0;
    for (int n = statues[0]; n < statues[statues.length-1]; n++) {
            int c = statues[n + 1] - statues[n];
            System.out.println(c);
            if (c != 1) {
                count += c - 1;
            }           
    }
    System.out.println(count);
    return 0;

}

}

1 Ответ

0 голосов
/ 30 апреля 2020

Кажется, что основное заблуждение здесь о , как перебирать какую-то структуру в for-l oop. Здесь вы написали

for (int n = statues[0]; n < statues[statues.length-1]; n++) {
    int c = statues[n + 1] - statues[n];
}

Это неверно, потому что, когда вы пытаетесь работать со статуями [statues [2]], вы эффективно работаете со статуями [4], которых не существует ; Вы, вероятно, просто хотите сослаться на статуи [n]. Решением этой проблемы является обработка n как обычного целого числа, которое принимает все значения в диапазоне [0, statues.length - 1). Это будет больше похоже на

for (int n = 0; n < statues.length - 1; n++) {
    int c = statues[n + 1] - statues[n];
}

Надеюсь, это поможет, и, пожалуйста, дайте мне знать, если я неправильно истолковал ваши намерения.

...