Необходимо устранить следующие проблемы:
- В методе
Arrays.copyOfRange(array, from, to)
индекс to
является эксклюзивным.Таким образом, вам нужно иметь его как Arrays.copyOfRange(bigArray,0,k)
, чтобы скопировать первые k
элементы во вспомогательный массив. - Логика, в которой вы перебираете оставшиеся элементы массива из основного массива и обновляете вспомогательный массивневерно.
Например, пусть вспомогательный массив будет: [4, 6]
, а следующий элемент основного массива будет 2
.Согласно вашей логике вспомогательный массив будет обновлен до [6, 6]
, так как вы сначала копируете элемент с индексом 1
в индекс 0
во вспомогательном массиве, а затем проверяете, больше ли новый элемент (из основного массива), чемэлемент с индексом 1
во вспомогательном массиве.В этом случае новый элемент меньше, поэтому происходит только копирование, и мы получаем поврежденный вспомогательный массив.
Что вам просто нужно сделать, это проверить, больше ли для каждого нового элемента из основного массивачем первый элемент во вспомогательном массиве.Если это так, то этот новый элемент должен быть частью вспомогательного массива и должен располагаться в правильном положении.Вы можете использовать технику сортировки по пузырькам, чтобы найти подходящее место.
public int findElement() throws IndexingError {
int[] bigArray = getArray();
int k = getIndex();
if (k <= 0 || k > bigArray.length) {
throw new IndexingError();
}
int[] smallArray = Arrays.copyOfRange(bigArray,0,k);
Arrays.sort(smallArray);
for (int i = k; i < bigArray.length; i++) {
if(bigArray[i] > smallArray[0]) {
smallArray[0] = bigArray[i];
int j = 0;
while((j < k-1) && (smallArray[j] > smallArray[j+1])) {
swap(smallArray[j], smallArray[j+1]);
j++;
}
}
}
return smallArray[0];
}