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”这个东西到底叫什么或用什么。

最佳答案

为什么?!?!?


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



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


您似乎给人的印象是Java数组将以合适的大小神奇地分配自己……并且它们会增长。实际上,当您分配数组时,您的程序必须明确说明其具有多少个元素。分配后,数组的大小是固定的。
该代码似乎是在尝试实现某种通用类型(其中E是通用类型参数)。





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


您将创建一个具有正确大小的新数组,将元素从旧的复制到新的,并更新data变量以指向新的数组。查看有关如何在Java中创建新数组的注释/教科书。


  我的老师从来没有告诉我们这种“ E”的商务性,她甚至从未告诉我们“ E”这个东西到底叫什么或用什么。



它很可能是通用类型参数。
我非常确定她会告诉班级有关此事的信息,或者设置Java教科书的相关部分以供班级阅读。


(假设E是泛型类型参数,分配一个新的E[]数组实例而没有“未经检查的转换”警告会有些棘手。也许您的讲师已经超越了该类当前的能力...)

10-02 08:18
查看更多