Java-Can';不能仅从名称访问类

Java-Can';不能仅从名称访问类,java,oop,Java,Oop,首先,我对java很陌生。我正在尽可能多地操纵我的代码,以便更好地理解它。下面的代码工作得很好,但当我尝试将其移动到它自己的构造中(我认为这是正确的术语)时,它失败了。此外,代码只是一小部分相关内容 public static void main(Strings[] args) { Hero Player1 = new Hero(); Hero Player2 = new Hero(); Player2.takeDamage(Player1.giveDamage());

首先,我对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()中,以使我的代码更加有序?

我可能需要很长时间才能详细解释所有内容,因为我不确定您不理解的确切部分是什么

我认为最好是一个好的代码。这不是一条路,但这是一条很好的路

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

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());
}

您有几个选择,第一个是将英雄传递到战斗阶段方法,如下所示:

    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());
    }
或者你可以先这样宣布英雄:

    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());
    }

您能在Hero类中显示takeDamage()方法和任何其他相关信息吗?请注意,对于变量,您应该使用常规的大小写<代码>英雄玩家1和
英雄玩家2
(注意缺少“玩家”大写)。你说的“失败”是什么意思,你能更准确一点吗?给予伤害和承受伤害都可以正常工作。问题只是当我尝试在main()之外创建combatPhase()时。这两个版本的代码完全相同,但我不想在combatPhase()中提到Player1/2。为了让我们回答这个问题,您需要提供更多。这些函数都在同一个类中吗?你到底犯了什么错误?这是一个“您不能调用静态方法”错误吗?(您知道静态类和非静态类之间的区别吗?
getDamage()
在这种特定情况下有点误导;)我把它叫做
dealDamage()
,本质上就是这样。我试图操纵它的第二部分,将代码的下半部分放入main()之外的另一个公共静态void combatPhase()。
player1
player2
需要在第二个示例中定义为静态,以及
combatPhase()
(在两个版本中)或者您创建一个新的类实例,该类承载的代码正是我所寻找的,并且可以正常工作,谢谢!是的,如果您正确,我将使用
classmain=newclass()
然后调用
main.combatPhase()