public class wan2{
public static void px(int a[]){
int i,j,temp;
for(i=1;i<a.length;i++)
for(j=0;j<a.length-1;j++){
if(a[i]<a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
public static void main(String args[]){
int b[]=null;
for(int i=0;i<10;i++){
b[i]=Math.round(10);
    px(b);}
for(int j=0;j<b.length;j++){
    System.out.println(b[j]);
}
}
如题,运行报NullPointerException,把int b[]数组初始化给个具体的数组长度,程序可以运行,请问高手原因是为什么
改好的代码:
 public class wan2{
public static void px(int a[]){
int i,j,temp;
for(i=1;i<a.length;i++)
for(j=0;j<a.length-1;j++){
if(a[i]<a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
public static void main(String args[]){
int b[]= new int [10];
for(int i=0;i<10;i++){
b[i]=Math.round(10);
    px(b);}
for(int j=0;j<b.length;j++){
    System.out.println(b[j]);
}
}}

解决方案 »

  1.   

    int b[]=null;
    如果你学过C就知道b是个空指针,所以没有分配b[0],b[1]...等元素的地址,所以b[i]=Math.round(10);就会出错
    int b[]= new int [10];
    这个是给b分配10个int的内存地址
      

  2.   

    如果a是null对象,a.length这个就会报NullPointerException
    你可以先判断a是不是null再进行处理
      

  3.   

    唉,楼主单步调试一下吧,这是java基础
      

  4.   

    要知道new之后内存和栈是怎么安排的就可以晓得的了~~~
      

  5.   

    public class NullPointerExceptionextends RuntimeException当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括: 调用 null 对象的实例方法。 
    访问或修改 null 对象的字段。 
    将 null 作为一个数组,获得其长度。 
    将 null 作为一个数组,访问或修改其时间片。 
    将 null 作为 Throwable 值抛出。 
    应用程序应该抛出该类的实例,指示其他对 null 对象的非法使用。
      

  6.   

    数组的声明只是一个引用,只会在栈中存在一个引用,
    只有new之后才会在堆中创建空间,没有空间就给赋值的话就会报错了
      

  7.   

    Java中要知道,数组以及类都是引用类型(定义一个变量就是定义的一个引用类型,指向的是一个对象,引用理解为一个已经钓到鱼的鱼杆,而对象就是鱼,我们可以通过鱼杆来控制鱼),相对而言的是内置基本类型(8种:int double..).
    要用引用使用一个对象,就得有一个对象把他的引用赋值给他。数组就是一个引用类型,定义的变量就是引用变量,使用他就要有对象,在上面代码中,他赋值为空,就是只有鱼杆,连线都没有,你怎么操作鱼呢。
      

  8.   

    为NULL 你还调用NULL的方法 当然要报错,NULL哪有方法呢
      

  9.   


    应该是这样的。。我们在使用数组的时候我们应该事先去定义数组的长度。。这样java虚拟机就会给数组分配相应的空间。。