Java-Can';不能仅从名称访问类
首先,我对java很陌生。我正在尽可能多地操纵我的代码,以便更好地理解它。下面的代码工作得很好,但当我尝试将其移动到它自己的构造中(我认为这是正确的术语)时,它失败了。此外,代码只是一小部分相关内容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());
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()代码>。