If if语句中的语句

时间:2012-04-15 23:16:15

标签: android if-statement

还是Java / android的新手,所以试图找出编写多级if语句的最佳方法。我正在尝试做的是一个需要检查玩家/ npc是否还活着的战斗系统。如果他们还活着,那么他们会检查他们是否获得了重击。如果他们没有受到重击,那么他们会看到他们是否被击中。

combat = mydbhelper.getCombat();
startManagingCursor(combat);
if (playerCurHp == 0) {
    combat.moveToPosition(11);
    npcCombatStory = combat.getString(combat.getColumnIndex(dbhelper.KEY_COMBATDESC));
} else {
    if (playerCritFlag.equals("Critical")) {
        combat.moveToPosition(2);
        playerCombatStory = combat.getString(combat.getColumnIndex(dbhelper.KEY_COMBATDESC));
    } else {
        if (playerHitFlag.equals("Hit")) {
            combat.moveToPosition(1);
            playerCombatStory = combat.getString(combat.getColumnIndex(dbhelper.KEY_COMBATDESC));
        }
        if (playerHitFlag.equals("Miss")) {
            combat.moveToPosition(3);
            playerCombatStory = combat.getString(combat.getColumnIndex(dbhelper.KEY_COMBATDESC));
        }
    }
}           
if (npcCurHp == 0) {
    combat.moveToPosition(10);
    npcCombatStory = combat.getString(combat.getColumnIndex(dbhelper.KEY_COMBATDESC));
} else {
    if (npcCritFlag.equals("Critical")) {
        combat.moveToPosition(5);
        npcCombatStory = combat.getString(combat.getColumnIndex(dbhelper.KEY_COMBATDESC));
    } else {
        if (npcHitFlag.equals("Hit")) {
            combat.moveToPosition(4);
            npcCombatStory = combat.getString(combat.getColumnIndex(dbhelper.KEY_COMBATDESC));
        }
        if(npcHitFlag.equals("Miss")) {
            combat.moveToPosition(6);
            npcCombatStory = combat.getString(combat.getColumnIndex(dbhelper.KEY_COMBATDESC));
        }
    }
}   

我正在使用的是什么。当我将if语句分开时,工作正常。但它会检查每一个并做我不需要的动作(如果它们击中,拉弦,如果暴击拉另一个,那么如果再次拉死)。当它找到匹配的“Flag”时,试图让它停止。当玩家点击它时,我会将标记设置为“命中”,如下面的代码。

Random attackRandom = new Random();
int attackRoll = attackRandom.nextInt(100);
totalAtt = attackRoll + bonusAttack + weaponAtt + stanceAtt;
Random defensiveRandom = new Random();
int defenseRoll = defensiveRandom.nextInt(100);
npcDef = defenseRoll + npcDodge + npcBonusDodge;
if (totalAtt > npcDef) {
    playerHitFlag = "Hit";
    playerDamage();
} else {
    playerHitFlag = "Miss";
    npcAttack();
}

最后它需要这些playerCombatStory和npcCombatStory字符串并使用它们来设置文本以向玩家显示该战斗中发生的事情。

3 个答案:

答案 0 :(得分:2)

我认为你正在寻找else if语句:

if (condition) {

}
else if (other_condition) {

}
else if (another_condition) {

}
else {
   // There can only be one else statement in a given if-else block
}

答案 1 :(得分:0)

你的问题不明确。但仍然可以提供有意义的建议。

就个人而言,我觉得这段代码难以阅读。我认为随着你的逻辑变得更加复杂,将来很难维持。

我认为你需要根据你的决定来解决所做的事情的逻辑。封装在Command对象中完成的操作,并使用地图或状态机查找要执行的操作。

答案 2 :(得分:0)

我会将npcCritFlag的类型更改为intenum。然后在switch

中使用case语句

这应该看起来更好,更容易理解

相关问题