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]);
}
}}
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]);
}
}}
如果你学过C就知道b是个空指针,所以没有分配b[0],b[1]...等元素的地址,所以b[i]=Math.round(10);就会出错
int b[]= new int [10];
这个是给b分配10个int的内存地址
你可以先判断a是不是null再进行处理
访问或修改 null 对象的字段。
将 null 作为一个数组,获得其长度。
将 null 作为一个数组,访问或修改其时间片。
将 null 作为 Throwable 值抛出。
应用程序应该抛出该类的实例,指示其他对 null 对象的非法使用。
只有new之后才会在堆中创建空间,没有空间就给赋值的话就会报错了
要用引用使用一个对象,就得有一个对象把他的引用赋值给他。数组就是一个引用类型,定义的变量就是引用变量,使用他就要有对象,在上面代码中,他赋值为空,就是只有鱼杆,连线都没有,你怎么操作鱼呢。
应该是这样的。。我们在使用数组的时候我们应该事先去定义数组的长度。。这样java虚拟机就会给数组分配相应的空间。。