

2つのプログラムでカートの中身を表示するプログラムを作成しました。  
Cart.java  
Item.java  
しかし実行するとNullpointerExceptionとなってしまいます。改善策をご教授願いたいです。  
配列の代入が自信ないです。  
Cart.java

[code]

    public class Cart {
        Item[] items;
        int num=0,i;
        void addItem(Item x){
            items[num]=x;
            num++;  
        }
        void info(){
            for(i=0;i<=num;i++){
                items[num].toString();
            }
        }
    
        public static void main(String[] args) {
            System.out.println(Item.getNumberOfInstances());
            Cart cart = new Cart();
            Item i1 = new Item("PC", 98000);
            Item i2 = new Item("Display", 40000);
            cart.addItem(i1);
            cart.addItem(i2);
            cart.info();
            System.out.println(Item.getNumberOfInstances());
        }
    }
    
[/code]

Item.java

[code]

    public class Item {
        String name;
        int price,i=0;
        Item(String a,int b){
            this.name=a;
            this.price=b;
            i++;
        }
        int getNumberOfInstances(){
            return i;
        }
        public String toString(Item c){
            return c.name+","+c.price;
        }
    }
    
[/code]


CC BY-SA 3.0
2017-05-19T07:17:29.273
34830
2017-05-19T10:24:07.223
2017-05-19T07:42:49.387
2238
23238
question
java
NullpointerExceptionが発生する原因


（既にコメントで指摘されている点は実行ができていることから投稿時のミスであるとして、）

**NullpointerException** が起きる原因は配列の割り当てをしていないためです。

通常配列は  
`データ型[] 配列の名前 = new データ型[配列のサイズ];`  
のようにして使用します。

投稿されたサンプルの場合右側部分がないので、null初期化されてそれを使用しようとするので例外が起きます。

なので、  
`Item[] items = new Item[100];`  
のようにするか  
コンストラクタで  
`items = new int[100];`  
のようにしてやります。

あと、  
配列はサイズの拡張ができませんので、配列を使用する場合はその範囲に気を付ける必要があります。  
例えば先の例のようにサイズを１００で確保した場合`num`が１００になったらそれ以上追加することはできません。

また、

[code]

    for(i=0;i<=num;i++){
        items[num].toString();
    }
    
[/code]

は

[code]

    for(i=0;i<num;i++){
        items[i].toString();
    }
    
[/code]

の間違い(`num`は次の代入位置であるため)です。


CC BY-SA 3.0
2017-05-19T10:24:07.223
34837
2017-05-19T10:24:07.223
5044
34830
answer