我正在做家庭作業,我無法弄清楚爲什麼每當我嘗試運行我的代碼時都會收到類轉換異常。我認爲這是由於(path.get(i)),但我似乎無法找出一種方法來解決它。我收到的錯誤是在Java中使用泛型時生成的類演員異常
Exception in thread "main" java.lang.ClassCastException: avltreend.BinarySearchTreeND$BSTNodeND cannot be cast to avltreend.AVLtreeND$AVLTreeNode
at avltreend.AVLtreeND.balancePath(AVLtreeND.java:64)
at avltreend.AVLtreeND.insert(AVLtreeND.java:27)
at avltreend.AVLtreeND.TestAVL(AVLtreeND.java:233)
at avltreend.AVLtreeND.main(AVLtreeND.java:244)
Java Result: 1
某些代碼低於
private void balancePath(K d) {
ArrayList<BSTNodeND<K>> path = path(d);
for (int i = path.size() - 1; i>= 0; i--) {
// System.out.println(path);
AVLTreeNode<K> A = (AVLTreeNode<K>)(path.get(i));
findheight(A);
AVLTreeNode<K> POA = (A == root) ? null :
(AVLTreeNode<K>)(path.get(i - 1));
的錯誤似乎高於5日線在運行時出現。
class BSTNodeND < L extends Comparable< ? super L > > {
L data;
BSTNodeND <L> left, right, parent;
BSTNodeND (L d) {data = d;}
BSTNodeND (L d, BSTNodeND <L> p) {data = d; parent = p;}
public String toString() {
return data.toString();} // end toString method
}
protected class AVLTreeNode<L extends Comparable<? super L>>
extends BSTNodeND<L> {
protected int height = 0; // New data field
public AVLTreeNode(L d) {
super(d);
}
這就是AVLTreeNode類。
我不明白爲什麼這兩個類不能一起工作,因爲我改變了一個工作示例,它應該工作。感謝您的任何幫助,您可以提供。
錯誤可能是在您的插入邏輯創建'BSTNodeND'時應該創建一個'AVLTreeNode',但您沒有給我們這個代碼。 – 2013-03-10 17:06:50