堆排序-ArrayIndexOutOfBoundsException-java

堆排序-ArrayIndexOutOfBoundsException-java,java,Java,我试图创建一个堆排序类,但我得到了这个错误 java.lang.ArrayIndexOutOfBoundsException 这是我的密码 package heap_sort; public class main { public static void main(String[] args) { int a[]={16,4,10,14,7,9,3,2,8,1}; heapsort(a); } public static void heaps

我试图创建一个堆排序类,但我得到了这个错误

java.lang.ArrayIndexOutOfBoundsException

这是我的密码

package heap_sort;

public class main {

    public static void main(String[] args) {
        int a[]={16,4,10,14,7,9,3,2,8,1};
        heapsort(a);

    }
public static void heapsort(int a[])
{
    build_max_heap(a);
    for(int i = a.length ;i<=2 ;i--)
    {
        a[1]=a[i];
        max_heapify(a,1,i-1);
    }

}
public static void build_max_heap(int a[])
{
    int n=a.length;
    for (int i =n/2 ;i>=1 ;i--)
    {
        max_heapify(a,i,n);
    }
}
public static void max_heapify(int a[],int i , int n)
{
    int L=i*2;
    int R=(i*2)+1;
    int Largest=i;
    if (L<=n && a[L] > a[i])

    Largest=L;


    if (R>=n && a[R]>a[Largest])
    {
        Largest=R;
    }
    if (Largest != i)
        Changing(a,i,Largest);
    max_heapify(a,Largest,n);
}
public static void Changing (int a[],int i,int LL)
{
    int T=a[i];
    a[i]=a[LL];
    a[LL]=T;
}
}
package-heap\u-sort;
公共班机{
公共静态void main(字符串[]args){
int a[]={16,4,10,14,7,9,3,2,8,1};
希普索尔(a);
}
公共静态void堆端口(int a[])
{
构建最大堆(a);
对于(int i=a.length;i=1;i--)
{
max_heapify(a,i,n);
}
}
公共静态void max_heapify(int a[],int i,int n)
{
int L=i*2;
int R=(i*2)+1;
int=i;
if(la[i])
最大=L;
如果(R>=n&&a[R]>a[最大])
{
最大=R;
}
如果(最大!=i)
变化(a、i、最大);
最大值(a,最大值,n);
}
公共静态无效更改(int a[],int i,int LL)
{
int T=a[i];
a[i]=a[LL];
a[LL]=T;
}
}

有人能告诉我我的问题是什么,我应该怎么解决吗?

代码中的问题是,它假设数组中的初始索引是
1
,最后一个索引是
a.length
,包含在内。例如:

for(int i = a.length ; i <= 2 ; i--)
代码中您做出相同假设的另一个地方需要固定如下:

for (int i = n/2 ; i>=1 ; i--)
// should be i >= 0

代码中的问题是,它假定数组中的初始索引是
1
,而最后一个索引是
a.length
,包括这两个索引。例如:

for(int i = a.length ; i <= 2 ; i--)
代码中您做出相同假设的另一个地方需要固定如下:

for (int i = n/2 ; i>=1 ; i--)
// should be i >= 0

@谢谢,我错过了这个倒装@luk2302您认为哪种情况mean@luk2302我仍然得到相同的错误后,修复这2conditions@luk2302谢谢,我错过了这个倒装@luk2302您认为哪种情况mean@luk2302在修复这两个条件后,我仍然会得到相同的错误