Java 当两个对象彼此实例化时发生异常

Java 当两个对象彼此实例化时发生异常,java,object,exception,Java,Object,Exception,因此,我正在创建一个简单的基于文本的游戏,但我在创建过程中遇到了一个异常/错误。 我有三个职业,一个叫Main,一个叫Mage,一个叫Warrior 因此,在游戏中,当一个玩家使用一个缩写时,它会减少另一个玩家一定数量的生命值 因此,当玩家1使用abbility时,例如在本例中是Fireball,它会在战士类中调用reduceHP方法,从而将玩家2的生命值降低44。reduceHP方法获取传入的数字,并从玩家的生命值中减去它 Warrior player2 = new Warrior(); p

因此,我正在创建一个简单的基于文本的游戏,但我在创建过程中遇到了一个异常/错误。 我有三个职业,一个叫Main,一个叫Mage,一个叫Warrior

因此,在游戏中,当一个玩家使用一个缩写时,它会减少另一个玩家一定数量的生命值

因此,当玩家1使用abbility时,例如在本例中是Fireball,它会在战士类中调用reduceHP方法,从而将玩家2的生命值降低44。reduceHP方法获取传入的数字,并从玩家的生命值中减去它

Warrior player2 = new Warrior();

public void FireBall(){

player2.reduceHP(44);

}
同样的事情也发生在法师的职业中。当玩家1使用战士abbility时,玩家2的生命值降低65

Mage player1 = new Mage();

public void Stab(){

player1.reduceHP(65);


}
现在的问题是,当我在主类中调用这些缩写/缩写(stab和fireball)时,我得到以下错误

at Warrior.<init>(Warrior.java:4)
at Mage.<init>(Mage.java:4)
at Warrior.<init>(Warrior.java:4)
at Mage.<init>(Mage.java:4)
at Warrior.<init>(Warrior.java:4)
at Mage.<init>(Mage.java:4)
at Warrior.<init>(Warrior.java:4)
at Mage.<init>(Mage.java:4)
at Warrior.<init>(Warrior.java:4)
at Mage.<init>(Mage.java:4)
at Warrior.<init>(Warrior.java:4)
at Mage.<init>(Mage.java:4)
at Warrior.<init>(Warrior.java:4)

ETC... it keeps on going
at Warrior.(Warrior.java:4)
在法师那里。(Mage.java:4)
在勇士号上。(Warrior.java:4)
在法师那里。(Mage.java:4)
在勇士号上。(Warrior.java:4)
在法师那里。(Mage.java:4)
在勇士号上。(Warrior.java:4)
在法师那里。(Mage.java:4)
在勇士号上。(Warrior.java:4)
在法师那里。(Mage.java:4)
在勇士号上。(Warrior.java:4)
在法师那里。(Mage.java:4)
在勇士号上。(Warrior.java:4)
等它还在继续

我想知道为什么会这样?如果还有其他方法,请让我知道,因为我对java还很陌生。感谢所有的帮助,非常感谢,我希望这不是一个真正愚蠢的问题。

你应该在
Main
类中实例化玩家,然后通过setter传递对他们的引用。这样,每个对象将有一个实例,它们将相互引用。

问题在于两个字段
player1
player2
。我想你想要两个对象,一个给玩家1,一个给玩家2。相反,您正在(隐式)构造函数中创建无限多的对象


我猜你是个初学者,所以我不在这里讨论细节。要解决此问题,您可能需要创建第三个类(可能名为
游戏
?),它了解这两个玩家。

添加完整的类。好的,我明白您的意思了!还有一个问题与这个问题无关。例如,如果我在我的法师类中实例化Warrior类,那么如果我在方法中使用引用变量,为什么我只能使用Warrior类中的方法呢。如果我在其他地方使用引用变量,并且尝试访问Warrior类和位于该类中的方法/变量,则不会出现任何问题?不要在注释中提问。为此提出新的问题。