0

単純なコードで少し問題があります。配列に格納されるメモを追加できるプログラムであると想定されています。このコードが長いことは承知していますが、うまくいけば助けてくれる人もいます。

public class NoteOrganizer {

    int action = 0;
    public static Note[] myArray;

    public static void addNotes(int num)
    {
        String note;
        String date;

        for(int z = 0; z <= num; z++)
        {
            Scanner getLi = new Scanner(System.in);
            System.out.println("Please enter a note (max 140 characters): \n");
            note = getLi.nextLine();

            System.out.println("Please enter a date:\n");
            date = getLi.nextLine();

            Note test = new Note();
            test.id = z;
            test.myNote = note;
            test.date = date;
            myArray[z] = test;  // THE ERROR IS IN THIS LINE, NOT THE LINE MENTIONED BEFORE

        }
    }

    public static void main(String[] args)
        {
        int action = 0;

        int y = 0;

        Scanner getLi = new Scanner(System.in);
        System.out.println("Please press 1 to add notes, 2 to delete notes or 3 to view "
                + "all notes:\n");
        action = getLi.nextInt();

        if(action == 1)
        {

            System.out.println("How many notes would you like to add: \n");
            int d = getLi.nextInt();
            //myArray = new Note[d];
            addNotes(d);
            //System.out.println(myArray[0].print());

        }
        else if(action == 3)
        {
            System.out.println(Arrays.toString(myArray));
        }

    }
}

私が得ているエラーは

Exception in thread "main" java.lang.NullPointerException
    at note.organizer.NoteOrganizer.addNotes(NoteOrganizer.java:46)
    at note.organizer.NoteOrganizer.main(NoteOrganizer.java:95)
Java Result: 1

エラーが発生した行をコメントしました。

どんな助けでも大歓迎です。

ありがとう、

4

4 に答える 4

5

Note 配列を初期化していません。何らかの理由でその行をコメントアウトしたようです:

//myArray = new Note[d];
于 2012-12-19T00:54:55.793 に答える
1
 public static Note[] myArray;

 myArray[z] = test;

配列を初期化していないため、まだ null です。

必要な長さがわかったら( のようですnum)、次のことができます

myArray = new Note[num];

アレイを使用する前に。

(すでにその趣旨のコードがあったようですが、何らかの理由でコメントアウトされています)。

于 2012-12-19T00:54:33.207 に答える
1

何にも設定myArrayしたことがないので、書き込むことはできません。

配列に書き込むことで配列を自動的に拡張しようとしていますが、Java では機能しません。ただし、ArrayListは最後に書き込みをサポートし (それ以上はサポートしません)、必要に応じて内部配列を再割り当てします。

ArrayList<Note> myList = new ArrayList<Note>();

次に、代わりに

myArray[z] = test;

使用する

myList.add(test);

List(どこにいても、の最後に自動的に追加されます)

次に、リストから次のように読み取ります

myList.get(index)
于 2012-12-19T00:55:05.447 に答える
0

配列を初期化する必要があります。動的配列のようなクラス ArrayList を使用することをお勧めします。

myArray = new Note[length];
于 2012-12-19T01:05:15.410 に答える