0
   Collection Class


private E[] data;


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

          return true;
       }

主要的

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

        ac.add(n);

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

编辑:所以我的问题是我需要调整 E[] 数据的大小,如何调整数据的大小?我的老师从来没有告诉我们这个“E”的生意,她甚至从来没有告诉我们这个东西“E”到底叫什么或用来做什么的。

4

1 回答 1

6

为什么?!?!?

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


但似乎还有一个更根本的问题:

  • 您似乎有这样的印象,Java 数组会神奇地为自己分配正确的大小……并且它们会增长。事实上,当你分配一个数组时,你的程序必须明确说明它有多少个元素。一旦它被分配,数组的大小是固定的。

  • 该代码似乎是在尝试实现某种泛型类型(其中E)是泛型类型参数。


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

您创建一个大小合适的新数组,将元素从旧数组复制到新数组,然后更新data变量以指向新数组。查看有关如何在 Java 中创建新数组的笔记/教科书。

我的老师从来没有告诉我们这个“E”的生意,她甚至从来没有告诉我们这个东西“E”到底叫什么或用来做什么的。

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

  2. 我很确定她告诉全班同学,或者设置 Java 教科书的相关部分供全班同学阅读。

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

于 2012-09-23T02:45:17.167 回答