这是我家庭作业的一部分,因为我想不通,所以我想我会试着在这里问。
我正在尝试使用堆栈在 BST 上实现迭代器。我让它编译并正确运行,结果似乎也是正确的。
但是,当我尝试使用学校的自动标记时,它允许我提交代码,系统将使用其模型进行检查。运行迭代器时出现以下错误:
!分析停止:您的代码产生了不正确的输出,未能抛出异常,或在不应该抛出异常时抛出异常。
java.lang.Exception:您的代码产生了不正确的输出,未能抛出异常,或者在不应该抛出异常时抛出了异常。在 LabProject.main(LabProject.java:115)
我很确定(正如它所说)我在下面的实现中抛出异常时遇到了麻烦,或者我可能在某些时候错过了抛出它们。我检查了好几次,似乎无法正确。有人能看到我需要做什么吗?
这是代码:
public class DictionaryItr<E extends Comparable<E>> implements Iterable<E> {
private MyNode first; // top of stack
public int modCount = 0;
// helper linked list class
private class MyNode {
private E item;
private MyNode next;
}
public DictionaryItr(DictionaryImp.DictNode root) {
first = null;
this.loadNodes(root);
}
@SuppressWarnings("unchecked")
public void loadNodes(DictionaryImp.DictNode node) {
if (node != null) {
loadNodes(node.right);
this.push((E)node.value);
loadNodes(node.left);
}
}
public boolean isEmpty() {
return first == null;
}
public void push(E item) {
MyNode oldfirst = first;
first = new MyNode();
first.item = item;
first.next = oldfirst;
modCount++;
}
public E pop() {
if (isEmpty()) throw new RuntimeException("Stack underflow");
E item = first.item;
first = first.next;
return item;
}
public E peek() {
if (isEmpty()) throw new RuntimeException("Stack underflow");
return first.item;
}
public Iterator<E> iterator() {
return new ListIterator();
}
private class ListIterator implements Iterator<E> {
private MyNode current = first;
private int expectedModCount;
public ListIterator() {
expectedModCount = modCount;
}
public boolean hasNext() {
return current != null;
}
public void remove() {
current = current.next;
}
public E next() {
if (modCount != expectedModCount) throw new ConcurrentModificationException();
if (!hasNext()) throw new NoSuchElementException("No more elements");
else {
E item = current.item;
current = current.next;
return item;
}
}
}
}