これは私の宿題の一部で、私はそれを理解できなかったので、私はここで質問しようと思いました.
スタックを使用して 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;
}
}
}
}