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

Java初学,求大神帮忙看看下面的Java程序哪里有问题。编译通过了,运行显 ...
一般是环境变量配置问题。如果环境变量确认正确看下是不是cmd命令在package下执行了。

java 程序 下面的错误,是什么原因,什么类型的,有可能是哪方面的? 求高...
根据提示是 空指针异常 标出的位置是51行和210行 由于51行是210行调用的,所以你直接检测51行就行了 51行有两个对象insertid和strtoken 你肯定是没有给其中的一个分配空间 你可以判断下,如 if(insertid==null) System.out.println("insertid is null");if(strtoken==null) System.out.println(...

java代码,不知道哪里错了,希望大神帮忙看看,谢谢!
额,我不是大神,但是也会一点。这是正确代码,你的错误是main方法写到类外面了 class Person{ String name;int age;void tell(String name,int age){ this.name = name ;this.age = age ;System.out.println("我是:" + this.name + ",年龄:" + this.age + "岁");} public static ...

请大神看看以下代码有什么问题吗?运行总是出错!
Java语言是大小写英文字母敏感的语言(换句话说大小字母是不一样的)你的Java程序中,Switch(person)和Switch(computer)错了,Switch应该全部小写switch 应该改成switch(person)和switch(computer),就没有错误了.多运行几次会有不同结果

JAVA大神看看我这代码哪里出错了,怎么就是运行不出来?
public static void main(String []args){System.out.println("x\\t\\tm(x)");System.out.println("___");int x=1;for(int i=1;i<=20;x+=1,i++){System.out.println(x+"\\t\\t"+m(x));}}public static double m(int x){double total=0.0;double temp;for(int i=1;i<=x;...

大家帮我看看这2个简单的java代码是否有错,哪里错了
针对提到的两个Java代码问题,让我们逐一解析:首先,对于第一题中的`total`变量。若将其视为局部变量而未初始化,程序将无法编译通过。为解决此问题,只需为`total`赋初始值,如`total = 0`,确保其存在且具有效值。其次,讨论第二题中的代码片段。存在多个错误:在使用`do while`循环时,循环体...

请高手帮我看看这个JAVA代码!为什么会出现这个问题
你这个有点乱了.一、你有一个类 InnerPolice 写在 MyFrame 里边,我不知道你什么意思;二、第二个类中,lbl 对象没有初始化 你就直接用了?你只是在类MyFrame里面声明并初始化了lbl.难道你在人类里面初始化了染头发这个对象,猪类里面也可以直接染一个么?三、你这代码有点凌乱,基本格式 public ...

找个JAVA高手帮忙分析下这段代码有什么问题,我在自学JAVA,现在写的这个...
有很多种可能哦,有可能是你的驱动有问题哦,你用的是2008还是2000还是2005,这些版本的驱动不同哦,还有在这里你没有用预处理,你为什么还要用preperStatement()这个方法呢,这样会降低效率的,没有预处理的时候还是用statement()吧

看看这个java代码哪里有问题?我照着书上一模一样写的。29行老提示错误...
这没有错,就是这个person 对象你创建后,没有引用,所以有这样的提示,红色的表示错误

劳烦大神帮我看看这里哪里出错了?JAVA基础数组题目。
for(int i=0;i<mz.length;i++) { if(mz2.equals(mz[i])) { System.out.print("下标为:"+i);break;\/\/这里加上 }else { System.out.println("不好意思,查无此人!");continue;\/\/这里改下 } }

相似回答