最简单的任务是给我nullPointerException

Mat*_*zuk 0 java nullpointerexception

   Collection Class


private E[] data;


@Override
       public boolean add(E element) {
       //NULL POINTER EXCEPTION HAPPENS ON NEXT LINE
                data[actualSize] = element;
                actualSize++;

          return true;
       }
Run Code Online (Sandbox Code Playgroud)

主要

        System.out.println ("Enter the integer to be added:   ");
        n = scan.nextInt();

        ac.add(n);
Run Code Online (Sandbox Code Playgroud)

我在集合类中的注释行之后得到一个空指针异常....为什么?!?!?

编辑:所以我的问题是我需要调整大小的E []数据,如何调整数据大小?我的老师从来没有告诉我们这个"E"的商业,她甚至从未告诉过我们这个东西"E"到底叫什么.

Ste*_*n C 6

为什么?!?!?

因为data还没有初始化.这null是尚未初始化的实例变量的默认值.


但似乎存在一些更基本的问题:

  • 您似乎认为Java数组会以合适的大小神奇地分配自己......并且它们会增长.实际上,当您分配一个数组时,您的程序必须明确说明它有多少个元素.一旦分配,阵列的大小就固定了.

  • 代码似乎是试图实现某种泛型类型(where E)是泛型类型参数.


所以我的问题是我需要调整大小的E []数据,如何调整数据大小?

您创建一个具有正确大小的新数组,将元素从旧元素复制到新元素,并更新data变量以指向新数组.查看有关如何使用Java创建新阵列的说明/教科书.

我的老师从来没有告诉我们这个"E"的商业,她甚至从未告诉过我们这个东西"E"到底叫什么.

  1. 它很可能是泛型类型参数.

  2. 我很确定她告诉全班同学,或者设置Java课本的相关部分供课堂阅读.

(假设这E是一个泛型类型参数,分配一个E[]没有"未经检查的转换"警告的新数组实例有点棘手.也许你的教师已经领先于该类目前的能力......)