Java:检测对象名称?

时间:2011-05-25 15:22:07

标签: java class

我正在开展一个小小的游戏,那里有一个攻击者和一个后卫。

        Player Attacker = new Player();
        Player Deffender = new Player();

    }
}
class Player{
    int armees = 0;
    int tarningar = 0;
    Dice Dices[];
    Player(){
        armees = 10;
        // if object name is Attacker, tarninger = 3, if defender = 2
        Dices= new Dice[tarningar];
        for(int i=0;i<Dices.length;i++){
            Dices[i]=new Dice();
        }
    }
}

我在上面的代码中注释了,我希望有一个if语句来确定它应该有多少骰子。

如果无法做到这一点,可能采取另一种方式吗?

我也试过

Attacker.tarningar = 3;
Deffender.tarningar = 2;

在main中定义对象的位置,但它不会工作,因为它已经在类中运行了Player()..

(我还是java新手)谢谢

4 个答案:

答案 0 :(得分:2)

将您的代码更改为:

  Player Attacker = new Player(true);
        Player Deffender = new Player(false);

    }
}
class Player{
    boolean attacker;
    int armees = 0;
    int tarningar = 0;
    Dice Dices[];
    Player(boolean attacker){
        this.attacker = attacker;
        armees = 10;
        tarninger = attacker ? 3 : 2;
        Dices= new Dice[tarningar];
        for(int i=0;i<Dices.length;i++){
            Dices[i]=new Dice();
        }
    }
}

答案 1 :(得分:2)

也许你可以这样做:

Player(boolean isAttacker){
    armees = 10;
    // if object name is Attacker, tarninger = 3, if defender = 2
    int diceNum;
    if (isAttacker) diceNum = 2;
    else diceNum = 3;
    Dices= new Dice[diceNum];
    for(int i=0;i<Dices.length;i++){
        Dices[i]=new Dice();
    }
}

然后你需要告诉玩家在构建时是攻击还是防御。

Player p = new Player(true); // creates an attacker

答案 2 :(得分:2)

您应该添加一个变量来确定这是攻击者还是防御者。或者甚至更好,如果他们做不同的事情,为攻击者和后卫创建子类。

答案 3 :(得分:1)

如果您尝试基于变量名进行区分,则无法进行区分,因为在编译器优化期间会删除该信息。如果可以访问实例,则可以执行

if (this == attacker)
{
    ...
}

或者您可以为商店名称引入新字段

Player attacker = new Player("Attacker");

或者也许是枚举。

Player attacker = new Player(PlayerType.Attacker);