1

これはElementクラスです:

public class Element {

    private String elementName;
    private int atomicNumber;
    private String Symbol;
    private double atomicWeight;

    public Element()
    {

    }

    public String getElementName()
    {
        return elementName;
    }
    public int getAtomicNumber()
    {
        return atomicNumber;
    }
    public String getSymbol()
    {
        return Symbol;
    }
    public double getAtomicWeight()
    {
        return atomicWeight;
    }
    public void setElementName(String elementName)
    {
        this.elementName = elementName;
    }
    public void setAtomicNumber(int atomicNumber)
    {
        this.atomicNumber = atomicNumber;
    }
    public void setSymbol(String Symbol)
    {
        this.Symbol = Symbol;
    }
    public void setAtomicWeight(double atomicWeight)
    {
        this.atomicWeight = atomicWeight;
    }

}

私はArrayこのクラスを作ろうとしています、これは私のmainU.javaクラスです:

public class mainU {

    public static void main(String[] args){     

            Element[] element = new Element[103];

        element[0].setElementName("H");
        String s = element[0].getElementName();

        System.out.println(s);

}

問題は、次のエラーが発生することです。

Exception in thread "main" java.lang.NullPointerException
    at mainU.main(mainU.java:14)

このようなエラーが発生する理由を誰でも教えてもらえますか? あなたが私を助けることができるように、私は私のプログラムをできるだけ単純にしました.

4

8 に答える 8

2

問題は次の部分にあります。

Element[] element = new Element[103];
element[0].setElementName("H");

その前に作成せずに最初の要素にアクセスします。配列を作成しますが、使用されるタイプの新しいオブジェクトが自動的に含まれていないため、これらを明示的に宣言する必要があります。次に例を示します。

element[0] = new element();

そして、オブジェクトを使用できます。

于 2013-01-10T12:39:29.607 に答える
1

新しいオブジェクト配列を作成すると、 で満たされた配列が生成されますnull。オブジェクトが必要な場合は、作成後に配列を反復処理し、新しいインスタンスを設定する必要があります。

于 2013-01-10T12:35:50.797 に答える
1

オブジェクトを作成する必要があります。オブジェクト参照の配列を作成しました。

Element[] element = new Element[103];
for(int i=0; i<103; i++) {
   element[i] = new Element();
}

あなたの要素はオブジェクトであり(配列はオブジェクトです)、ヒープに保存されます。すべての Element オブジェクト参照は null 値に初期化されます。そのため、sを取得していますNPE

Element[] element = new Element[103];
element[0].setElementName("H");  // element[0] is null
于 2013-01-10T12:35:57.530 に答える
1

Element Array を初期化しただけで、その要素を初期化していない場合、

        Element[] element = new Element[103];
    element[0].setElementName("H");// this cause NPE as element[0] is null

以下のように要素を初期化する必要があります。

      Element[] element = new Element[103];
       element[0] = new Element();
      element[0].setElementName("H");
于 2013-01-10T12:36:11.210 に答える
1

のように配列を宣言すると、配列オブジェクトは初期化されますが、配列の要素は初期化されません。配列の各インデックスに Element オブジェクトを作成する必要があります。

element[0] = new Element();
element[0].setElementName("H");
于 2013-01-10T12:36:25.160 に答える
1

オブジェクトの配列を作成すると、そのすべての要素が に初期化されnullます。次のように、新しいElementオブジェクトを作成して配列に追加するだけです。

Element[] elems = new Element[100];
elems[0] = new Element();
elem[0].setElementName("asdf");
于 2013-01-10T12:37:31.173 に答える
1

を初期化していませんelement[0]。最初にそれを初期化する必要があります。実際には、それらを使用する場合はすべての配列要素です。

element[0]=new Element();

または、ループを使用してそれらすべてを初期化できます

  for(int i=0;i<element.length;i++)
  {
    element[i]=new Element();
  }
于 2013-01-10T12:38:02.183 に答える
0

その2行の間

 Element[] element = new Element[103];
 element[0].setElementName("H");

を作成する必要がありますelement[0]。つまり、 の新しいインスタンスを構築しますElement。あなたのコードelement[0]では nullNullPointerExceptionですsetElementName

于 2013-01-10T12:36:08.957 に答える