08-08
12
递归
作者:Java伴侣 日期:2008-08-12
被自己的粗心大意忙活了一上午,结果是笔误,如下程序,是一个判断要求,父分类不能移动到子分类中:
结果我发现这程序怎么跑都返回true,找了两小时,抽了两根烟,到了中午吃完饭回来,打个饱嗝,结果发现在递归后面没有加返回(红色就是),那么当然是无论怎么进行,递归的最后都是true了,去掉就好了!
复制内容到剪贴板 程序代码
public boolean checkJieDian(Catalog catalogNow, Catalog catalogMove) {
CatalogService s = new CatalogService();
if(catalogMove==null){
log.info("最后还是没有找到,那么就返回");
return true;
}
catalogMove = s.getCatalog(catalogMove.getId());
// 如果目标分类有父级
if (catalogMove.getParentCatalog() != null) {
// 取得父级
Catalog parentCatalogMove = catalogMove.getParentCatalog();
// 如果目标分类为现有分类的父
// 看看父中ID和现有是否相等,如果相等,现有的属于移动的父
if (parentCatalogMove.getId() == catalogNow.getId()) {
log.info("parentCatalogMove.getId():"+parentCatalogMove.getId());
log.info("catalogNow.getId():"+catalogNow.getId());
log.info("父类不能移动到子类!!!!!!!!!!!");
return false;
}
else {
log.info("进入递归");
// 否则,移动再取父 ,再次去数据库取得,避免溢出,避免-no session
parentCatalogMove = s.getCatalog(parentCatalogMove.getId());
return this.checkJieDian(catalogNow, parentCatalogMove);
}
}
if (catalogMove.getParentCatalog() == null) {
return true;
}
return true;
}
CatalogService s = new CatalogService();
if(catalogMove==null){
log.info("最后还是没有找到,那么就返回");
return true;
}
catalogMove = s.getCatalog(catalogMove.getId());
// 如果目标分类有父级
if (catalogMove.getParentCatalog() != null) {
// 取得父级
Catalog parentCatalogMove = catalogMove.getParentCatalog();
// 如果目标分类为现有分类的父
// 看看父中ID和现有是否相等,如果相等,现有的属于移动的父
if (parentCatalogMove.getId() == catalogNow.getId()) {
log.info("parentCatalogMove.getId():"+parentCatalogMove.getId());
log.info("catalogNow.getId():"+catalogNow.getId());
log.info("父类不能移动到子类!!!!!!!!!!!");
return false;
}
else {
log.info("进入递归");
// 否则,移动再取父 ,再次去数据库取得,避免溢出,避免-no session
parentCatalogMove = s.getCatalog(parentCatalogMove.getId());
return this.checkJieDian(catalogNow, parentCatalogMove);
}
}
if (catalogMove.getParentCatalog() == null) {
return true;
}
return true;
}
结果我发现这程序怎么跑都返回true,找了两小时,抽了两根烟,到了中午吃完饭回来,打个饱嗝,结果发现在递归后面没有加返回(红色就是),那么当然是无论怎么进行,递归的最后都是true了,去掉就好了!
评论: 0 | 引用: 0 | 查看次数: 622
发表评论