else { MonsterVec validMonsters; MonsterVec invalidMonsters; validMonsters.reserve(monsterIds.size()); for (IntSet::iterator it = monsterIds.begin(); it != monsterIds.end();++it) { MonsterVec::iterator invalidIt = std::find(invalidMnsIds.begin(), invalidMnsIds.end(), *it); //数据库中存在,且类型也有效 if ( invalidIt == invalidMnsIds.end() && mnsTypes.find(*it) != mnsTypes.end()) { validMonsters.push_back(*it); } else // 怪物Id和对应的怪物类型不一致或怪物不属于部落群 { invalidMonsters.push_back(*it); } } vmnsInfos[ivp].horde = mnsInfos[i].horde; vmnsInfos[ivp].monsterInfos.length((unsigned long)validMonsters.size()); for (unsigned int k = 0; k < validMonsters.size(); k++) { for (CORBA::ULong pos = 0; pos < mnsStatusSeq.length(); pos++) { if ((int)mnsStatusSeq[pos].monsterId == validMonsters[k]) { vmnsInfos[ivp].monsterInfos[k] = mnsStatusSeq[pos]; break; } } } ivmnsInfos[iip].horde = mnsInfos[i].horde; ivmnsInfos[iip].monsters.length((unsigned long)invalidMonsters.size()); for (unsigned int k = 0; k < invalidMonsters.size(); k++) { for (CORBA::ULong pos = 0; pos < mnsStatusSeq.length(); pos++) { if ((int)mnsStatusSeq[pos].monsterId == invalidMonsters[k]) { ivmnsInfos[iip].monsters[k].monsterId = (unsignedint)invalidMonsters[k]; ivmnsInfos[iip].monsters[k].monsterName = mnsStatusSeq[pos].monsterName; ivmnsInfos[iip].monsters[k].reason = NPC_STR2WSTR(WORLD::Message(getCvt(), "import_invalid_monster")); break; } } } ivp++; iip++; } } else//部落群和怪物一致,且对应怪物类型一致 { vmnsInfos[ivp].horde = mnsInfos[i].horde; vmnsInfos[ivp].monsterInfos = mnsStatusSeq; ivp++; } } ivmnsInfos.length(iip); vmnsInfos.length(ivp); return bRet; } |
示例代码段一:
第一步:
代码检视要做的首先就是评审代码的逻辑正确性,即代码是否完整、准确地实现了业务逻辑。
这一步只需对代码进行抽象,将其“翻译”为“注释”就可阅读其实现逻辑,并与需求逻辑(设计逻辑)相比较。