- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我正在用java编写一个双向链表实现,我需要打印出值,以便我可以测试代码是否有效。然而,在过去的几天里,我一直在试图找出为什么我总是陷入无限循环。这是我的代码:
public class DoublyLinkedList<T> implements LinkedListInterface<T>, Iterable<T>{
private Node<T> head;
private Node<T> tail;
private int size;
//add, remove, clear, isempty methods, etc.
private class LinkedListIterator<E> implements java.util.Iterator<E> {
private Node<E> probe;
public LinkedListIterator(Node<T> head) {
probe = (Node<E>)(head);
}
public boolean hasNext() {
return (probe!= null);
}
public E next() {
if (!hasNext()) {
throw new NoSuchElementException("There is no element.");
}
E temp = probe.getData();
probe = probe.getNext();
return temp;
}
public void remove() {
throw new UnsupportedOperationException("We don't support this function.");
}
}
我尝试打印出这些值,但我只得到一个无限重复的值。这是怎么回事?非常感谢您的帮助。主要是,这就是我所拥有的:
DoublyLinkedList<Integer> list = new DoublyLinkedList<Integer>();
list.add(0, 1);
list.add(1, 2);
for (Integer i : list) {
System.out.print(i + " ");
}
这是节点类的代码:
public class Node<E> {
private E data;
private Node<E> next;
private Node<E> prev;
public Node(E data) {
//do I need this?
this.data = data;
}
@Override
public String toString() {
//TODO
return data + " ";
}
// Implement Methods
public E getData() {
return data;
}
public Node<E> getNext() {
return next;
}
public Node<E> getPrev() {
return prev;
}
public void setData(E e) {
data = e;
}
public void setNext(Node<E> e) {
next = e;
}
public void setPrev(Node<E> e) {
prev = e;
}
}
编辑:这是我的添加方法:
public boolean add(int index, T data) {
// TODO
boolean toReturn = false;
if (data == null) return false;
if (index == 0) {
Node<T> toAdd = new Node<T>(data);
if (isEmpty()) {
head = toAdd;
tail = toAdd;
} else {
head.setPrev(toAdd);
}
toAdd.setNext(head);
head = toAdd;
toReturn = true;
} else if (index == size()) {
Node<T> toAdd = new Node<T>(data);
if (isEmpty()) {
head = toAdd;
tail = toAdd;
} else {
tail.setNext(toAdd);
toAdd.setPrev(tail);
}
tail = toAdd;
toReturn = true;
} else {
Node<T> toAdd = new Node<T>(data);
if (isEmpty()) {
head = toAdd;
tail = toAdd;
} else {
getNodeAt(index).setPrev(toAdd);
}
toAdd.setNext(getNodeAt(index));
getNodeAt(index-1).setNext(toAdd);
toReturn = true;
}
size++;
return toReturn;
}
以下是我的 getNodeAt() 方法:
private Node<T> getNodeAt(int index) {
int count = 0;
Node<T> element = head;
while (element != null) {
if (count == index) {
return element;
} else {
count++;
element = element.getNext();
}
}
return null;
}
最佳答案
我愿意打赌您的问题出在节点中(您不提供代码)。检查 Node.getNext() 是否实际上返回下一个节点,而不是对其自身的引用。
关于java - 使用LinkedList的迭代器打印值,在java中不断陷入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21685959/
如果这不是一个错误,那就是另一个错误。如果不是那样的话,那就是别的东西了。我觉得我的项目已经改变了很多,现在只是试图解决代码签名问题,结果一切都搞砸了。我严格按照说明进行操作,但出现错误,例如当前的“
我不确定是否有一些我不知道的内置变量或规则,或者 make 是否有问题,或者我只是疯了。 对于我的一个项目,我有一个如下的 makefile: CC=g++ CFLAGS=-O3 `libpng-co
我有大约 10 个 div,它们必须不断翻转,每个 div 延迟 3 秒 这个 codrops 链接的最后一个效果是我正在寻找的,但无需单击 div http://tympanus.net/Devel
我如何使用 jQuery 持续运行 PHP 脚本并每秒获取响应,以及将鼠标上的少量数据发送到同一脚本? 我真的必须添加一些随机扩展才能让这么简单的计时器工作吗? 最佳答案 To iterate is
JBoss 4.x EJB 3.0 我见过如下代码(大大简化): @Stateless @TransactionAttribute(TransactionAttributeType.NOT_SUPPO
使用 PHPStorm,我试图忽略每次尝试进行 git 提交时 pop 的 workspace.xml。 我的 .gitignore 看起来像: /.idea/ .idea/workspace.xml
我是一名优秀的程序员,十分优秀!