java.lang.ArrayIndexOutOfBoundsException — заполнить новый массив циклическими данными из другого массива

#java #arrays #for-loop

#java #массивы #для цикла

Вопрос:

У меня есть сканер, который устанавливает длину массива, затем массив заполняется случайными числами от 0 до 1000.

Далее я хочу получить все четные числа и сохранить их в новом массиве. Для этого я создал цикл для подсчета размера нового массива.

Во-вторых, я снова запускаю цикл и хочу заполнить новый массив всеми четными числами из исходного массива.

Если я тестирую с длиной 1 или 2, код иногда работает, и новый массив может быть сгенерирован. Если я работаю с массивом длиной около 10, я получаю сообщение об ошибке типа:

java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 4

Для этого примера ошибки я настроил массив длиной 10. У меня в нем 4 четных числа. Счетчик сработал и изменился на «4». Тем не менее, я получаю сообщение об ошибке.

     //GET A COUNT FOR THE LENGHT OF ARRAY
    int count = 0;
    for(int i = 0; i < arrayLenght; i  ){
        if (dasArray[i] % 2 == 0) {
            count  ;
        }
    }
    
    System.out.println("COUNT "   count);
    
    
    //CREATE NEW ARRAY WITH ALL EVEN NUMBERS AND THE LENGHT OF COUNT
    int []dasGeradeArray = new int[count];
    for(int i = 0; i < arrayLenght; i  ){
        if (dasArray[i] % 2 == 0) {
            dasGeradeArray[i]= dasArray[i];
        }
    }
  

Комментарии:

1. Как вы думаете i >= count , что происходит во втором цикле? Кроме того, вам нужно сохранить еще один счетчик i (назовем его j ) и увеличивать его только при необходимости, например dasGeradeArray[j ]= dasArray[i];

2. Очевидно, что во втором цикле for вам нужно выполнить цикл while i < count .

Ответ №1:

Это связано с тем, что dasGeradeArray имеет половину индексов, которые имеет dasArray. Вы не должны использовать ту же переменную i . Вы можете добавить другую переменную, которую вы увеличиваете каждый раз, когда добавляете что-либо в dasGeradeArray:

/

 /CREATE NEW ARRAY WITH ALL EVEN NUMBERS AND THE LENGHT OF COUNT
    int []dasGeradeArray = new int[count];
    int dasGeradeCounter = 0
    for(int i = 0; i < arrayLenght; i  ){
        if (dasArray[i] % 2 == 0) {
            dasGeradeArray[dasGeradeCounter]= dasArray[i];
            dasGeradeCounter  ;
        }