0

私はコンピュータ サイエンスの 1 年生で、1 学期の課題は Java で簡単な音楽データベースを設計することです。私は 3 つのクラス、Interface (すべてのユーザー イン/アウトを処理する)、Song (アーティスト、名前、期間、ファイルサイズを格納する)、および Database (4 つの曲オブジェクトを格納する; a、b、c、d) を使用しています。プログラムを正常にコンパイルして実行できますが、最近入力した情報を返すメッセージの代わりに最後のフィールド (fileSize) を入力すると、NullPointerException が表示されます。これは、null の値の割り当てと関係があることを理解しています。

データベース クラスのコードは次のとおりです。

public class songDatabase
{
    song sin = new song();
    private song a,b,c,d;

    public songDatabase()
    {
        a = null;
        b = null;
        c = null;
        d = null;
    }

    public void addSong(String artist, String name, double duration, int fileSize)
    {
        if (a==null) setData(a,artist,name,duration,fileSize);
        else if (b==null) setData(b,artist,name,duration,fileSize);
        else if (c==null) setData(c,artist,name,duration,fileSize);
        else if (d==null) setData(d,artist,name,duration,fileSize);
    }

    private void setData(song sin, String artist, String name, double duration, int fileSize)
    {
        sin.setArtist(artist);
        sin.setName(name);
        sin.setDuration(duration);
        sin.setFileSize(fileSize);
    }

    public String visconfir()
    {
        if (a != null) return("You have imported: "+sin.getName()+"by"+sin.getArtist()+"which is"
                +sin.getFileSize()+"kB and"+sin.getDuration()+"long(mm.ss)");
        else return("Error - No file imported to database memory slot a");
    }
}

誰でもこれで私を助けることができますか?

4

1 に答える 1

2

if (a==null) setData(a,artist,name,duration,fileSize);

最初のパラメーターとして を呼び出す場合 (これはa == nullです) 。setDataanull

今、setDataあなたは:

sin.setArtist(artist);sin最初のパラメータです。これは書くようなものです:

null.setArtist(artist)、もちろん.. NPE をスローします。

補足: Java Naming Conventionsに従うことをお勧めします。これを読んだら、クラス名を大文字で始めるように変更したくなるかもしれません。

于 2013-04-27T08:16:57.770 に答える