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开始,在写程序时应时刻注意集合下标是否越界....