我正在构建一个Heap数据结构,但是让我疯狂的部分是检查null子值。
我正在使用Vector,我正在将一个父母与一个孩子进行比较,但是如果只有一个孩子,那么该程序会崩溃,因为
vectorObject.get(i) //i'th element doesn't exist
将返回异常。
我无法用
之类的东西来检查null元素if (vectorObject.get(i) == null)
因为运行get()方法会自动中断程序,那么如何在没有一些不可读的奇怪黑客的情况下实际检查一个不存在的元素呢?
答案 0 :(得分:1)
如果您的父母位于0
,那么您的孩子就在2*(0)+1=1
和2*(0)+2=2
。在这种情况下,1 < vectorObject.size()
将为true,但2 < vectorObject.size()
为false,表示有一个左子,但没有正确的孩子。
由于Vector
(或ArrayList
(如果您按照我的建议切换)是基于零的,您需要检查i < vectorObject.size()
,而不是i <= vectorObject.size()
。如果i < vectorObject.size()
则i
是合法索引。
的更新强> 的
有两种方法可以在这里构建逻辑。如果你必须完全不同于独生子女案件处理单亲案件,那么这可能效果最好:
int size = vectorObject.size();
if (2*i+2 < size) { /* Two-child case */ }
else if (2*i+1 < size) { /* One-child case */ }
else { /* No children case */ }
如果分别处理这两个节点,那么嵌套可能会更好:
int size = vectorObject.size();
if (2*i+1 < size) {
// Handle left child
if (2*i+2 < size) {
// Handle right child
}
else {
// No right child
}
}
else { /* No children */ }
答案 1 :(得分:0)
尝试/捕捉:
try{
yourVector.get(int theElementYouWant);
}
catch(NullPointerException){
//well, I guess that element was null!
}