#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 ;
}