首页 > 解决方案 > 排序数组 - 任何人都可以帮我解决我失败的地方吗?

问题描述

我需要组织一个数组,但出现 OutOfBoundException 错误:

int[] A = {8, 6, 7, 9, 4, 8, 1, 4, 10, 3};
int start = 0;
int end = A.length;
public void insertionSort(int[] A, int start, int end) {
  for (int i = start; i <= end; i++){
    for (int j = i+1; j > start; j--){
      if(A[j] < A[j-1]){
        int k = j-1;
        swap(A, j, k);

那个交换函数是别人已经做过的方法,他是教授,所以错误不是来自那里。谁能指出我失败的地方?

标签: javaarraysindexoutofboundsexception

解决方案


数组从索引 0 而不是 1 开始。因此,数组的长度已经超出了索引的范围。只需更改您的第一个 for 循环,使其运行只要i<end可以解决您的问题。

for (int i = start; i < end; i++)

除此之外,您的内部循环也是错误的。您可以选择是要测试下一个索引 (i+1) 还是上一个索引 (i-1)。在 (i+1) 的情况下,外部循环再次运行得太远(现在它必须是i < end-1)。如果您想使用之前的索引 (i-1) 进行更改,您的 i 必须从 1 而不是 0 开始。

例如(与下一个元素交换):

for (int i = 0; i < end-1; i++){
    for (int j = i+1; j > 0; j--){
        if(A[j] < A[j-1]){

推荐阅读