0

我有两节课:

FirstClass{
    private int id;
    private SecondClass[] arrayofSecond;
    private int ind;
    public FirstClass(){}
    public FirstClass(int id){
         this.id=id;
    }
    public void addElements(SecondClass e){
         arrayofSecond[ind]=e;
         ind++;
    } 
    public SecondClass[] getArraySecondClass(){
        return arrayofSecond;
    }    
}

SecondClass{
    private int id;
    private SecondClass(){}
    private SecondClass(int id){
          this.id=id;
    }
    public int getId(){
          return id;
    }
}

现在我需要在Main程序中获取FirtsClass中已经填好的数组,像这样:

FirstClass f1=new FirstClass(10);
SecondClass s1=new SecondClass(10);
SecondClass s2=new SeconClass(20);
f1.addElements(s1);
f1.addElements(s2);
FirstClass f=null;
SecondClass s[];
s=f.getArraySecondClass();
for (int i=0;i<s.length;i++){
    System.out.println(s[i].getId());
}

问题是我收到空指针异常的错误。我已经读过,根据“不与陌生人交谈”的原则,这可能不是正确的方法,但我看不到另一种方法。

有什么帮助吗?

4

5 回答 5

2

为什么f你已经创建了一个变量f1

FirstClass f1=new FirstClass(10);
SecondClass s1=new SecondClass(10);
SecondClass s2=new SeconClass(20);
f1.addElements(s1);
f1.addElements(s2);

SecondClass s[];
s=f1.getArraySecondClass();
for (int i=0;i<s.length;i++){
    System.out.println(s[i].getId());
}
于 2013-04-26T12:36:27.390 回答
0

您必须初始化arrayofSecond.

在您的构造函数中,FirstClass您必须做arrayofSecond = new SecondClass[10];或您想要的任何其他长度。

于 2013-04-26T12:35:56.413 回答
0
FirstClass f=null;

应该

FirstClass f= new FirstClass(10);

f设置为null所以你得到NPE.

于 2013-04-26T12:37:16.387 回答
0

您必须启动 arrayOfSecond 变量以避免 NullPointerException。

更改 private SecondClass[] arrayofSecond; 为例如

    private SecondClass[] arrayofSecond = new SecondClass[10];
于 2013-04-26T12:38:04.113 回答
0

首先,您不应该允许外部类直接访问您的私有数据字段。所以而不是

public SecondClass[] getArraySecondClass(){
    return arrayofSecond;
}

你应该做类似的事情

public SecondClass[] getArraySecondClass(){
    return (SecondClass[])arrayofSecond.clone();
} 

除此之外,您需要在 FirstClass 构造函数中初始化 arrayOfSecond 和

f.getArraySecondClass();

当 f 为空时,这不是最好的主意。

于 2013-04-26T12:42:32.457 回答