2015-11-09 3 views
0

Идущие этот код:вставки Ошибка Java ArrayIndex вне границ

public static int[] insertionSort(int[] array) { 
    for (int j = 1; j < array.length; j++) { 
     int cur = array[j]; 
     int prev = j - 1; 
     while ((prev > -1) && (array[prev] > cur)) { 

      array[cur] = array[prev]; 
      prev--; 
     } 
     array[prev + 1] = cur; 
    } 
    return array; 

} 

Я получаю ошибку Indexoutofbounds на массиве [текущ] = массив [пред];

Вот мой тест:

int[] array = { 23, 5, 3, 5, 34, 2}; 

Почему ошибка? Логика я думаю, что это хорошо

+2

Если вы применили основной отладки (например, печать '' cur' и prev') вы бы не задать этот вопрос ... – John3136

ответ

3
int cur = array[j];// So, 'cur' will have any number may be out of bound 

В вашем цикле вы используете array[cur] = array[prev]; и считают cur = 23, что находится вне границы. В основном, cur предназначен для текущего индекса, но вы храните в нем текущий элемент.

1

Просто измените цикл while, и я надеюсь, что это работает нормально.

while ((prev >= 0) && (array[prev] < cur)) 
{ 
    array[prev + 1] = array[prev]; 
    prev--; 
} 
+0

я проверил в консольном проекте для (Int J = 1, J <массив .Length; j ++) { int cur = array [j]; int prev = j - 1; while ((prev> = 0) && (array [prev] ShreeJi

+0

Да, было неправильно, плохое форматирование сделало меня погруженным) – Stanislav

+0

Я знаю, что это плохое форматирование, но этот метод не работает там? если да, то дайте мне свой код. – ShreeJi

 Смежные вопросы

  • Нет связанных вопросов^_^