Java - 无法单独从名称访问类

时间:2014-01-09 22:59:56

标签: java oop

首先,我对java很新。我正在尝试尽可能多地操纵我的代码以便更好地理解它。下面的代码完美地运行,但是当我尝试将它移动到它自己的构造中时(我认为这是正确的术语)它失败了。此外,代码只是一个很小的相关部分。

public static void main(Strings[] args) {
    Hero Player1 = new Hero();
    Hero Player2 = new Hero();
    Player2.takeDamage(Player1.giveDamage());
    Player1.takeDamage(Player2.giveDamage());
}

// Fails if:
public static void main(Strings[] args) {
    Hero Player1 = new Hero();
    Hero Player2 = new Hero();
    combatPhase();
}

private static void combatPhase() {
    Player2.takeDamage(Player1.giveDamage());
    Player1.takeDamage(Player2.giveDamage());
}

基本上它要我使用Hero.takeDamage而不是Player1 / 2。有没有一种相当简单的方法来解决这个问题,所以我可以将它放在combatPhase()中以保持我的代码更有条理?

2 个答案:

答案 0 :(得分:1)

你有几个选择,第一个是将Heroes传递给combatPhase方法,如下所示:

    public static void main(Strings[] args)
    {
      Class main = new Class();
      Hero player1 = new Hero();
      Hero player2 = new Hero();
      main.combatPhase(player1, player2);
    }

    private void combatPhase(Hero player1, Hero player2){
      player2.takeDamage(player1.giveDamage());
      player1.takeDamage(player2.giveDamage());
    }

或者你可以像这样首先宣布英雄:

    Hero player1 = new Hero();
    Hero player2 = new Hero();

    public static void main(Strings[] args)
    {
      Class main = new Class();
      main.combatPhase();
    }

    private void combatPhase(){
      player2.takeDamage(player1.giveDamage());
      player1.takeDamage(player2.giveDamage());
    }

答案 1 :(得分:0)

我可以很长时间地详细解释一切,因为我不确定你不理解的确切部分是什么。

我认为一个好的代码可能更好。这不是可行的方法,但它是一个很好的方式。

首先让我们定义一个英雄:

public class Hero {
    private int damage;

    public Hero(int damage){
        this.damage = damage;
    }
    public int getDamage(){
        return damage;
    }
    public void takeDamage(int damage){
        //TODO
    }
}

现在是一场基本的战斗:

public static void main(Strings[] args) {
    Hero player1 = new Hero();
    Hero player2 = new Hero();
    player2.takeDamage(player1.getDamage());
    player1.takeDamage(player2.getDamage());
}