Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

自作クラスの配列にアクセスできない

public abstract class Character {
    String name;
    private int hp;
    private int maxHp;
    private int atk;
    private int def;
    private int lv;
    private Weapon weapon;
    private Armor armor;
    private Potion[] potion = new Potion[5];
    
    Character(String name, int maxHp, int atk, int def, int lv, Weapon weapon, Armor armor) {
        this.name = name;
        this.hp = maxHp;
        this.maxHp = maxHp;
        this.atk = atk;
        this.def = def;
        this.lv = lv;
        this.weapon = weapon;
        this.armor = armor;
        System.out.println(potion[0].getName());  // エラー箇所
//        for(int i = 1; i < 5; i++) {
//            System.out.println("i = " + i);
//            setPotion(i, null, null, -1);
//        }
    }

Exception in thread "main" java.lang.NullPointerException
    at Character.<init>(Character.java:22)
    at Hero.<init>(Hero.java:11)
    at Main.main(Main.java:17)

Character.javaで定義したPotionクラスの配列にアクセスしたいのですが、インスタンス化したはずなのにNullPointerExceptionで弾かれてしまいます。
ネットや参考書を読み直したのですが分からなくて困っています。

3

回答

91264

閲覧

3件の回答

評価

0

> インスタンス化したはずなのにNullPointerExceptionで弾かれてしまいます。

インスタンス化できてないよ。

> private Potion[] potion = new Potion[5];

ここはあくまでPotionクラス5個分の空配列を作ったに過ぎない。
個々の要素は何も参照していない状態だから当然NullPointerExceptionになる。
各要素にPoitionクラスのインスタンスを参照するようにすればいい。

potion[0] = new Potion();

評価

0

意味が分かれば何てことはないが、おそらく大抵の人が一度は引っかかるんじゃないかな。

new Potion[5]は配列という特別なクラスを生成しているだけ。
椅子を5つ用意しただけでは、その椅子には誰も座ってないとでも言おうか。

評価

0

インスタンスの生成ができていると思ってましたができてなかったんですね。
ご指摘された通り各要素にnew Potion();を行ったところ無事動きました。
回答ありがとうございました!

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。