2012-03-14 18 views
1

私は自分のプログラムコードをC言語で記述していましたが、Javaに移行してシンプルな構造体を定義し、以下のコードでその構造体を作成しようとしましたが、が発生する スレッド "main"の例外java.lang.NullPointerException at CPoint.main(CPoint.java:19) 私はどこかの配列にメモリを割り当てなければならないが、どこにはわからない。すべてのヘルプは理解されるであろう。Java:ユーザ定義の構造体の配列を定義する

public class CPoint { 
public int x; 
public int y; 

public CPoint(int size){ 

    System.out.println("Constructor1 is called"); 
} 
    public CPoint(){ 
    System.out.println("Constructor2 is called"); 
} 


public static void main(String[] args){ 

    CPoint [] p = new CPoint [3]; 

    p[0].x=90;p[0].y=80;  // this is line 19 

    System.out.println(p[0].x); 
} 

}

PS。可能であれば、main()コードを可能な限りシンプルに保ちたいと思います。

答えて

1

配列pには3 nullのエントリが含まれています。配列を初期化しても、オブジェクトは作成されません。詳細については、Arraysを参照してください。

1

あなたは配列内の各オブジェクトを割り当てる必要があります。

public static void main(String[] args){ 

    CPoint [] p = new CPoint [3]; 

    p[0] = new CPoint(); 
    p[0].x=90;p[0].y=80; 

    System.out.println(p[0].x); 
} 

編集:あなたはクラスの静的メソッドに、配列の初期化をラップすることができます - 基本的に配列ファクトリメソッド:

public class CPoint { 
    public int x; 
    public int y; 

    public CPoint() { System.out.println("Inside constructor 1"); } 

    public static CPoint[] CPointSet(int size) { 
     CPoint[] p= new CPoint[size]; 
     for(int i=0; i<size; i++) 
      p[i] = new CPoint(); 
     return p; 
    } 

    public static void main(String[] args) { 
     CPoint[] p = CPoint.CPointSet(3); 
     p[0].x = 90; 
     p[0].y = 80; 
    } 
} 
+0

あなたはこの簡潔な方法で配列を初期化することができます可能であれば –

+0

@Cgraphics、それは不可能です。しかし、配列の初期化をインライン展開することができます。 – Moonbeam

+0

@Cgraphicsあなたができることは、配列の周りにクラスラッパーを作成することです - これは本当に良いJavaの練習ではありませんが。要素の数を渡すクラスを1つ作成してから、コンストラクタで配列を割り当てて、各要素をループに割り当てます。ここでも、これはJavaでは実際には良い習慣ではありません。 –

0

オブジェクトを使用する前に作成する必要があります。

CPoint [] p = new CPoint [3]; 
p[0] = new CPoint(); 
0

新しいCPoint [3](つまり、Cに違う)、参照のどの事実でアレイをArrayオブジェクトを作成し、そして全ての3つの要素が最初に「ヌル」を参照して、ムーンビームに同意。新しいCPointオブジェクトをいくつか使用すると、(CPoint構造体用の)メモリが割り当てられません。私はのような単純なmain()のコードを維持したい可能であれば、私は、しないメインに、クラスCPointのどこかにメモリを割り当てるしたい

CPoint[] p = { new CPoint(), new CPoint(), new CPoint() } 

p[0].x=90; p[0].y=80; 

System.out.println(p[0].x); 
関連する問題