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;

您没有初始化数组,所以它仍然为空。

一旦你知道你需要的长度(似乎是num),你可以做

myArray = new Note[num];

在使用数组之前。

(看起来你已经有了这样的代码,但由于某种原因它被注释掉了)。

于 2012-12-19T00:54:33.207 回答
1

你从来没有设置myArray任何东西,所以你不能写进去。

您正在尝试通过写入来自动扩展数组,但这在 Java 中不起作用。但是, anArrayList确实支持最后写入(但不支持进一步写入),并根据需要重新分配其内部数组:

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 回答