我在扩展AbstractList的MyLinkedList类中遇到了一些NPE问题。我从这些构造函数开始:
专用节点类的构造函数:
public Node(T nodeData, Node<T> nodePrev, Node<T> nodeNext)
{
this.data = nodeData;
this.prev = nodePrev;
this.next = nodeNext;
}
MyLinkedList类的构造函数
MyLinkedList()
{
this.head = new Node<T>(null, null, null);
this.tail = new Node<T>(null, null, null);
this.size = 0;
}
MyLinkedList(Node<T> head, Node<T> tail, int size)
{
this.head = head;
this.tail = tail;
this.size = size;
}
在这里,我尝试使用以下方法返回索引处的节点:
private Node<T> getNth(int index)
{
Node<T> temp;
if(index < 0 || index > size)
throw new IndexOutOfBoundsException();
if(index < this.size() / 2)
{
temp = this.head;
for(int i = 0; i < index; i++)
{
temp = temp.getNext();
}
}
else
{
temp = this.tail;
for(int i = this.size(); i > index; i--)
{
temp = temp.getPrev();
}
}
return temp;
}
我认为主要的问题与将头部和尾部初始化为null有关,但我不确定这是否是问题所在,如果是,如何修复它。有没有更好的方法来初始化这些节点来避免NPE的呢?
使用以下命令初始化列表的头部和尾部:
MyLinkedList()
{
this.head = new Node<T>(null, null, null);
this.tail = new Node<T>(null, null, null);
this.size = 0;
}
这似乎是您的NPE的主要来源,因为您的迭代不做任何类型的检查。特别是,您的方法在边界条件下会失败(因为您在尝试迭代之前已经检查了长度)。
通过添加一些检查,您可以避免这些例外情况:
private Node<T> getNth(int index)
{
Node<T> temp = null; //Always try to initialize your variables if you're going
//to return them.
if(index < 0 || index > size)
throw new IndexOutOfBoundsException();
if(index < this.size() / 2)
{
temp = this.head;
for(int i = 0; i < index; i++)
{
if(temp.getNext() != null)
temp = temp.getNext();
else
break;//Break the iteration if there is not a next node
}
}
else
{
temp = this.tail;
for(int i = this.size(); i > index; i--)
{
if(temp.getPrev() != null)
temp = temp.getPrev();
else
break;
}
}
return temp;
}
如果需要,您可以抛出某种异常,而不是中断迭代。
我对Java中泛型的概念不熟悉。我有一个泛型方法,它的返回类型也是泛型。 我收到此错误,< code >无法解析T中的方法“getAa”。两个类都有这个成员变量,但是java并不理解,因为sub方法返回的是这个对象的一般列表。有没有办法改掉这个错误? 下面是我的代码,
问题内容: 我刚刚开始使用Java进行编程。在讨论方法和构造函数时,我们缺少使用的文字。我不确定到底是什么方法或构造函数以及什么使每个方法唯一。有人可以帮我定义它们并区分两者吗? 问题答案: 构造函数与方法之间的重要区别在于,构造函数初始化使用运算符创建的对象,而方法对已存在的对象执行操作。 构造函数不能直接调用。当关键字创建对象时,将隐式调用它们。可以直接在已使用创建的对象上调用方法。 构造函数
我在这个上面有点卡住了。我正在编写一个包含两个类的java程序,然后是一个测试程序来测试类中的方法。我被困在主方法中调用下面的两个方法上。所有的类文件(测试程序类和另外两个类)都在编译,IDE没有给我任何错误消息,计算只是没有发生…… --主要方法代码: -账户类别代码: 注意:平衡设置器正在工作,因为它在测试程序的前面被调用... 非常感谢任何帮助!!! 账户类别的完整代码: 主要方法完整代码:
我必须实现一个名为的方法(Factory-method),在这里我可以创建具有特定温度单位(摄氏度、开尔文...)的新对象。我还创建了将代码从一个单元转换为另一个单元的方法。问题是我不知道如何将covert-method连接到方法。我试着让我的所有方法和变量,以便我可以调用它们。问题是:如何在create-methods中实现convert-methods? 这是我的代码:
问题内容: 我想知道为什么他们在Java中设计方法来接受数组的输入? 在我看来,他们不需要此输入,因为ArrayList实例本身具有足够的详细信息以将数据转换为数组。 我的问题是为什么他们仍然需要传递数组?谢谢。 问题答案: 我能想到的两个原因: 删除表示通用参数在运行时不可用,因此不 知道 它包含字符串,而只是原始类型。因此,所有对的调用都必须返回,这并不是严格正确的。您实际上必须创建第二个数组
问题内容: Object类中的getClass方法如何能够动态返回Class? 问题答案: 它不返回类 名 -返回代表该对象类型的类型。每个对象都“知道”它实际上是什么类型- 这取决于执行时间类型,即强制转换如何工作或失败。只是从对象中检索相关信息。 如果您的类仅包含一个,则每个对象仍将在内存中占用4个以上的字节:有效地存在一个对象“标头”,其中包含对对象的实际类型的引用,与监视器关联的信息该对象