java数组程序应该没问题,出现的提示我不会修改

public class e1 {

public static void main(String[] args) {

    int[]a=getSons(10);

    printArray(a);
}//计算一个数因子的个数
public static int getlength(int n){
    int count=0;
    for(int i=1;i<n/2;i++){
        if(n%i==0)
            count++;
    }
    return count;
}//求一个数字的所有yin子,放入数组
public static  int[]getSons(int n){
    int []a=new int [getlength(n)];
    int j=1;
    for(int i=1;i<=n/2;i++){
        if(n%j==0)
        a[j]=i;
        j++;


    }
        a[j]=n;//把自己放进去
        return(a);

}//打印数组

public static void printArray(int[]a){
for(int i=0;i<a.length;i++){
System.out.print(a[i]+ " ");
}
System.out.println();
}
}

/*运行后提示Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at e1.getSons(e1.java:23)
at e1.main(e1.java:6)*/

//需要怎么修改

错误:数组指针越界

public static int getlength(int n){
int count=0;
for(int i=1;i if(n%i==0)
count++;
}
return count;
}//求得 count=2;
在getSons(int n)方法中 a.length()=2;
但是在这个方法中,你调用了这个数组三次,也就是说,,这个方法是的 a 数组的长度为3>2;
所以,解决办法就是:
int []a=new int [getlength(n)+1];
或者:
a[j]=n;//删掉

if 判断一下数组下标 - -

数组越界了 getlength 这个方法的最后结果是2 也就意味着 你这个数组a长度是2
但是你的j又是从1开始 其实j应该是重0开始

public static int getlength(int n)中计算因子数时,是从1到n/2,没有把n自己算进去。
所以数组越界了。

getSons()里的for循环数组越界了,j要从0开始,最后的a[j] = n去掉。

23行下标越界了,,,,,

数组指针越界,在编程语言里,几乎所有的集合下标都是从0开始,在写程序时应时刻注意集合下标是否越界....