Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

クラス型配列の中身を表示したいのにエラーが出ます。

Q&A

Closed

解決したいこと

クラス型配列の中身を表示したいです。
実行するとエラーが出ました。
解決方法を教えて下さい。

発生している問題・エラー

Exception in thread "main" java.lang.NullPointerException
    at lesson14_4.BookShelf.main(BookShelf.java:7)


または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード クラス:BookShelf

コード訂正したコード。
```java
package lesson14_4;
public class BookShelf {

public static void main(String[] args) {
    Book[] bookshelf = new Book[2];
    System.out.print(bookshelf[0]);
    bookshelf[0] = new Book("Javaプログラミング",2800,"A");
    bookshelf[1] = new Book("test",1250,"B");


    for(int i = 0 ; i < bookshelf.length ; i ++) {
    System.out.println("書名:" + bookshelf[i].getName()+ "/");
    System.out.println("価格:" + bookshelf[i].getPrice()+ "円/");
    System.out.println("著者名:" + bookshelf[i].getAuther()+ "/");
    }

}

}
```

訂正前のコード
```java
package lesson14_4;
public class BookShelf {

public static void main(String[] args) {
    Book[] bookshelf = new Book[2];

    bookshelf[0].setName("Javaプログラミング"); //7行目
    bookshelf[0].setPrice(2800);
    bookshelf[0].setAuther("A");

    bookshelf[0].setName("test");
    bookshelf[0].setPrice(1250);
    bookshelf[0].setAuther("B");

    for(int i = 0 ; i < bookshelf.length ; i ++) {
    System.out.println("書名:" + bookshelf[i].getName()+ "/");
    System.out.println("価格:" + bookshelf[i].getPrice()+ "円/");
    System.out.println("著者名:" + bookshelf[i].getAuther()+ "/");
    }

}

}


### 該当するソースコード クラスBook
```java
package lesson14_4;

public class Book {

    private String name;
    private int price;
    private String auther;

    public Book(String name,int price,String auther) {
        this.name = name;
        this.price = price;
        this.auther = auther;
    }

    public String getName() {
        return name;
    }

    public int getPrice() {
        return price;
    }

    public String getAuther() {
        return auther;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public void setAuther(String auther) {
        this.auther = auther;
    }




}

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。
同じようなエラーを解決された方がいないか検索してみたのですが、私のエラーの理由は分かりませんでした。

0

1Answer

今回発生したエラーは既に解決したようですね、
おめでとうございます。

お役に立てればと思い、エラーが発生した時の
自分なりの解釈を記載します。

先に申し上げておきます。
エラーメッセージが出てから修正するまでの「おおよそ」の流れ話をしますが
「余計なお世話」
でしたら無視してくださって結構です。
(言葉狩りのように「エラー」と「例外」の違いなどの細々した仕様ような話は全くしません)

①今回発生した事象(どうしたん?)

引用==============================

実行するとエラーが出ました。解決方法を教えて下さい。

Exception in thread "main" java.lang.NullPointerException
at lesson14_4.BookShelf.main(BookShelf.java:7)

==================================

②原因究明(なんでそうなったん?)

Javaの配列仕様に関わった事象のため今回は難解だったのでしょう。

「どのタイミングで」「どのようなエラーが」出たかを
正確に把握することができるようになれば、ある程度質問も絞ることができます。
(そのまま③に繋がります)

③翻訳

非常にざっくり申し上げると

Exception in thread "main" java.lang.NullPointerException
at lesson14_4.BookShelf.main(BookShelf.java:7)

↓↓

※「thread」という単語は今回無視します。
どんな状況なん?:「java.lang.NullPointerException(ヌルポ)」という例外(Exception:)が発生しました。

どこで発生したん?:「lesson14_4」というパッケージの中の「BookShelf」(恐らくクラス).main(BookShelf.java:7)(の中の[main]の7行目にあるエラーがありますよ)

==================================

参考:

可能であればJavaの「スタックトレース」を
しっかり読んでみることをオススメします。
公式ドキュメントであるため
「java.lang.NullPointerException」のような例外含めた状況が理解できます。

1Like

Comments

  1. @Choco_Late

    Questioner

    ご丁寧にありがとうございます。スタックトレースをきちんと見たことがなかったので、せっかく教えていただいたので見てみようと思います。
    どのタイムングで、どのエラーということも考えてエラーの原因を考えるようにしようと思います。今回は、Eclipseでコードを書いている時に警告文も出てなかったのでちょっと困ってしまいました。
    インスタンス化されていないのに、メソッドを使おうとしたので実行時にエラーが出たのだと今は理解ができます。
    エラーの解読経験値を上げていきたいと思います。
    ありがとうございました。
  2. @Choco_Late

    Questioner

    今度、知り合いにプログラムを教えてもらうチャンスがあるので、スタックトレースの見方を聞いて起きます。

Your answer might help someone💌