异常抛出错误

时间:2014-04-21 20:45:05

标签: java

我正在使用教科书中预先编写的课程并将其实施到我的课程中。每次我尝试向树中添加一个新元素时都会抛出重复的错误,我不知道为什么,我根本没有操纵编写的代码。

基本上,程序会提示用户输入一些信息,并将该信息作为学生添加到二叉搜索树中,我从教科书中得到以下信息:

AbstractBinaryTree类:

public abstract class
AbstractBinarySearchTree<E extends Comparable<? super E>> implements
BinarySearchTree<E> 

public void add( E element ) {
if ( element == null ) {
  throw new SearchTreeException();
}
setRoot( add( null, this.root(), element ) );
size++;
}
...

LinkedBST课程:

public class LinkedBST<E extends Comparable<? super E>> extends
AbstractBinarySearchTree<E> {

public LinkedBST( E element ) {
if ( element == null ) {
  throw new java.lang.IllegalArgumentException( "null element is illegal" );
}
this.root = new BSTNode<E> ( element );
this.size = 1;
}

protected void setRoot( BSTNode<E> newRoot ) {
this.root = newRoot;
}

protected BSTNode<E> add( BSTNode<E> parent, BSTNode<E> node, E element ) {
if ( node == null ) { // base case
  node = new BSTNode<E> ( element );
  node.parent = parent;
}
else { // recursive case
  int compareResult = element.compareTo( node.element );
  if ( compareResult < 0 ) { // recursive case - left
    node.leftChild = add( node, node.leftChild, element );
  }
  else if ( compareResult > 0 ) { // recursive case - right
    node.rightChild = add( node, node.rightChild, element );
  }
  else {
    throw new SearchTreeException( "Duplicate element: " + element.toString() );
  }
}

return node;
}
 ...

以及BinarySearchTree界面,然后我实际从单独的类调用该方法:

...
AbstractBinarySearchTree<Student> tree = new LinkedBST<Student>(); //this could be a problem?
...
tree.add(new Student(studentNumber, firstName, lastName, major, gpa));

所以,我知道这部分起作用至少。我能够在树中添加至少一条记录,但是当我尝试添加第二条记录时,无论信息是什么,它都会继续抛出SearchTreeException a(也是预先编写的)并且赢得了&#39;添加任何其他人。我仍然是抽象类和二叉搜索树的新手,所以我正在尽力实现这一点,所以如果有人能看到我出错的地方那就太棒了!

1 个答案:

答案 0 :(得分:1)

如果查看Comparable界面及其compareTo(..)方法,则说明

  

返回负整数,零或正整数作为此对象   小于,等于或大于指定的对象。

如果您看到SearchTreeException,则表示此段代码

int compareResult = element.compareTo( node.element );
if ( compareResult < 0 ) { // recursive case - left
    node.leftChild = add( node, node.leftChild, element );
}
else if ( compareResult > 0 ) { // recursive case - right
    node.rightChild = add( node, node.rightChild, element );
}
else {
    throw new SearchTreeException( "Duplicate element: " + element.toString() );
}

使用了compareTo(..)的实现,该实现返回了0

从评论中,您声明您使用的是默认(IDE-)创建的方法实现,该方法始终返回0。您需要解决此问题,以便您的compareTo方法按照javadoc中的说明进行操作。