Java初学者,求大神看看下面代码为什么出错。

public class Sort {

public static void main(String[] args) {
// TODO Auto-generated method stub
int [] array=null;
initArray(array,7);
showArray(array);
}

public static void initArray(int [] A, int n){
A = new int[n];
for(int i=0;i<n;i++)
A[i] = (int)(Math.random()*10);
showArray(A);
}

public static void showArray(int[] A)
{
for(int value:A){
System.out.print(value+" ");
}
System.out.println("");
}
错误是 出现了空指针

上面声明了一个数组引用array,指向了一个null空,在initArray方法中进行初始化没问题,并且确实存入了随机的一些数据,但是在这个方法中是数组引用A指向了一个有地址的堆区,而array还是指向一个null,在showArray(array)方法调用时,你将一个null传进去,在里面遍历,当然空指针了!

这里补充下,调用showArray(array)这里,在initArray中的调用不会有问题,因为传入的就是有效的引用A,而在main方法中的showArray(array)就不行了,因为这里的array是null,一定要想象到内存的状态
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-25
在main方法的 showArray(array);这句中的array是空值啊

public class Sort {
public int [] array=null;
public static void main(String[] args) {
// TODO Auto-generated method stub
Sort s = new Sort();
s.initArray(s.array,7);
s.showArray(s.array);
}

public void initArray(int [] A, int n){
A = new int[n];
for(int i=0;i<n;i++)
A[i] = (int)(Math.random()*10);
this.array = A;
showArray(A);
}

public void showArray(int[] A)
{
for(int value:A){
System.out.print(value+" ");
}
System.out.println("");
}
}追问

恩,这样肯定没问题,但是我不想新建一个对象,感觉这样挺麻烦的,能不能通过修改直接就像我得代码那样initArray(array)这样

追答

public class Sort {
static int [] array=null;
public static void main(String[] args) {
// TODO Auto-generated method stub

initArray(array,7);
showArray(array);
}

public static void initArray(int [] A, int n){
A = new int[n];
for(int i=0;i<n;i++)
A[i] = (int)(Math.random()*10);
array = A;
showArray(A);
}

public static void showArray(int[] A)
{
for(int value:A){
System.out.print(value+" ");
}
System.out.println("");
}
}

第2个回答  2015-04-25
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] array=null;
initArray(array,7);
showArray(array);
}
这个showArray(array); array没有改变 还是Null
相似回答