作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在做家庭作业,但我不明白为什么每当我尝试运行我的代码时总是遇到类转换异常。我认为这是由于 (path.get(i)) 但我似乎无法找到修复它的方法。我收到的错误是
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 类。
我无法弄清楚为什么这两个类不能一起工作,因为我已经改变了一个工作示例并且它应该可以工作。感谢您提供的任何帮助。
最佳答案
您的变量path
是BSTNodeND
的ArrayList
。当您获取一个元素时,您试图将其转换为 AVLTreeNode
。也就是说,您正在尝试将父类转换为子类,如果列表中只有“子”元素,则可能会起作用,但如果对象的类型是 BSTNodeND
那么您无法将其转换为它的专门子类AVLTreeNode
。
关于java - 在 Java 中使用泛型时生成类转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15324971/
我是一名优秀的程序员,十分优秀!