ArrayList<Muchie> binarySearchLant(Punct p, int l, int r, ArrayList<ArrayList<Muchie>> lanturi) {
int m = (l+r)/2;
if (l < r) {
Object[] lant = lanturi.get(m).toArray();
Punct[] puncte = new Punct[lant.length+1];
Muchie muchie = null;
for (int i=0;i<lant.length;i++)
puncte[i] = ((Muchie)(lant[i])).getPI();
puncte[puncte.length-1] = ((Muchie)lant[lant.length-1]).getPS();
int abs = Math.abs(Arrays.binarySearch(puncte, p));
if (abs <= 1)
muchie = (Muchie)lant[0];
if (abs >= puncte.length)
muchie = (Muchie)lant[lant.length - 1];
if (abs > 1 && abs < puncte.length)
muchie = (Muchie)lant[abs-2];
System.out.println(lanturi.get(m));
if (this.calcDet(muchie.getPI(), p, muchie.getPS()) > 0)
this.binarySearchLant(p, m+1, r, lanturi);
else
this.binarySearchLant(p, l, m-1, lanturi);
} else {
return lanturi.get(m);
}
return null;
}
这个函数基本上是一个适应的二进制搜索,但我的问题。我不认为解释代码是必要的,因为那不是我的问题。我的问题是如果我想回来 lanturi.get(m)
这个函数的返回值总是空的,但是如果我改为使二进制搜索函数变为空的话 return lanturi.get(m);
至 System.out.println(lanturi.get(m));
它打印的正是它应该打印的。我真不明白为什么。
暂无答案!
目前还没有任何答案,快来回答吧!