【发布时间】:2016-02-16 07:06:29
【问题描述】:
我正在处理我目前正在尝试调试的任务。我有很多error: (method name) in class (SuperClass Name) cannot be applied to given types;。该项目正在将一个以过程编程为中心的游戏重新用于同一游戏,但现在围绕 OOP。我是 Java 新手,我的任务是创建许多类,其中两个是超类的子类(显然),并且我已经获得了要拥有的方法及其参数。我遇到的问题是子类中的一种方法应该控制两个角色之间的战斗,玩家和敌人。这两个类都是字符类(超类)的子类。由于这是一项课堂作业,我不想发布我拥有的所有内容,但下面是我尝试执行的战斗方法的示例。我遇到的问题,一般来说,“inheritance”仍然存在,正是在父/子类之间继承了什么以及如何传递某些值/变量他们每个人之间。
在下面的示例代码中,此方法嵌套在扩展 Character 类的 Player 类中。此方法需要使用 Enemy 类中的和敌人并执行其中的操作。根据结果,我将布尔值传回程序的 main 方法。
我的问题是这样的;我不确定如何在已包含在“Player”类下的方法中调用此示例中已创建为“Player”类的类。我被要求在调用时为该方法使用一个参数Enemy。我很肯定我没有以适当的方式处理这个特定的任务,并且有更好的方法来处理这个问题。但是非常感谢任何有助于理解什么是可能的,因为它将帮助我以正确的方式处理这项任务。
Player 类的示例方法如下:
public abstract class Character{ //Character Superclass - attack method called
public int attack(Player _player){
Random randomNumbers = new Random();
int enemyRandAtk = randomNumbers.nextInt(Weapon.getMaxDamage - Weapon.getMinDamage) + Weapon.getMinDamage;
int enemyAtk = enemyRandAtk + getStrength();
int charRemainingHP = _player.getHitPoints() - enemyAtk; //can I call _player in the Character class????
System.out.printf("%s attacks with ATK = %d + %d = %d\n", getName(), getStrength(), enemyRandAtk, enemyAtk);
System.out.printf("%s HP is now %d - %d = %d\n\n", _player.getName(), _player.getHitPoints(), enemyAtk, charRemainingHP);
return charRemainingHP;
}
public class Player extends Character{
public int attack(Enemy _enemy){
Random randomNumbers = new Random();
int enemyHP = _enemy.getHitPoints();
int charRandAtk = randomNumbers.nextInt(Weapon.getMaxDamage - Weapon.getMinDamage) + Weapon.getMinDamage;
int charAtk = charRandAtk + getStrength();
int enemyRemainingHP = _enemy.getHitPoints() - charAtk;
System.out.printf("\n\n%s attacks with ATK = %d + %d = %d\n", getName(), getStrength(), charRandAtk, charAtk);
System.out.printf("%s HP is now %d - %d = %d\n\n", _enemy.getName(), enemyHP, charAtk, enemyRemainingHP);
return enemyRemainingHP;
}
public boolean battleWizard(Enemy _enemy){
Random randomNumbers = new Random();
Scanner userInput = new Scanner(System.in);
int spellCast = randomNumbers.nextInt(4) + 1;
System.out.printf("*** %s vs The Evil Wizard ***\n\n", getName()); //getName() is in Player Class
boolean charWinning = false;
int updWizHP = _enemy.getHitPoints(); //****** Question 1. below
do{
System.out.print("Choose your action: \n" +
"1. Attack\n" +
"2. Attempt Spell Cast\n\n" +
"What would you like to do?: ");
int battleDecision = userInput.nextInt();
if (battleDecision == 1){
updWizHP = Player.attack(_enemy); //**** Question #2 Below
if (updWizHP <= 0){
charWinning = true;
break;
}
}else if(battleDecision == 2){
System.out.print("Enter your guess: ");
int playerGuess = userInput.nextInt();
if (playerGuess == spellCast){
System.out.printf("The %s's spell is cast successfully! The Wizard's HP is now 0!\n\n", getName());
charWinning = true;
updWizHP = 0;
break;
}else{
System.out.print("Your spell missed the Wizard. Now he attacks!\n");
}
}
if (getHitPoints() > 0){
enemyDamage = Enemy.attack();
decreaseHitPoints(_enemy.attack(Player)); \\**** Question #3 below
if (getHitPoints() < 0){
charWinning = false;
break;
}
}
}while(getHitPoints() > 0 && _enemy.getHitPoints() > 0);
if (charWinning)
return true;
else
return false;
}
}
请记住,这是子类 (Player) 中的一个方法,它与 (Enemy) 的方法大致相同,只是除了这个和其他几个。
就我上面的代码而言,这是我的具体问题:
方法
battleWizard中的第6 行(注释中的#1 问题)- 由于此方法位于Player类中,我可以以这种方式引用Enemy类吗?如果没有,有什么更好的方法?方法
battleWizard中的第12 行(注释中的#2 问题)- 当方法(代码示例)在类本身中时,如何引用具有以自己的名称创建的对象的类?我想使用最终用户的播放器player并在其内部引用该对象,如果这有意义吗?我正在尝试想象编译器将如何执行此任务并且无法想象它会如何工作。从底部算起 13 行(注释中的#3 问题参考): a)您可以将方法作为参数传递给Java中的另一个方法吗? b)是像这样调用另一个子类(与调用该类的子类级别相同)的正确方法,还是有可能?
感谢您的帮助。正如我之前提到的,由于这是一个班级作业,我不想提供更多我的代码示例。但不可避免地,如果它有助于我理解,那么我会的。请让我知道您需要什么进一步的信息。
预计到达时间:
我添加了额外的代码来描述超类和子类之间的关系。对于Enemy 子类,它依赖于Character 超类的攻击方法。所以在我上面的代码示例中,我希望它能阐明 3.b。我的问题。需要任何进一步的信息,请告诉我。
【问题讨论】:
-
理想情况下,与其向我们展示更多实际代码,不如创建一个简短但完整的示例来说明只是问题。你可以通过复制你的真实代码来做到这一点,并一点一点地删除所有不相关的东西,确保你仍然有错误。它不需要做任何有用的事情——它只需要以我们可以重现的方式来展示问题。
-
告诉行号无济于事,因为文本编辑器的格式和所有..请评论代码类似
#question1,#question3.a,#question3.b..您当前尝试将代码注释是不是很有帮助.. -
你不用上课。你调用方法。从其他方法调用它们是正常的。你的问题,或者至少你的标题,仍然不清楚。
-
我已经编辑了我的线程以适应上面的所有问题/cmets。感谢您最初的意见,帮助我缩小问题范围!
-
"在这个例子中,如何在一个已经包含在"Player"类下的方法中调用一个已经成为"Player"类的类"仍然没有意义。
标签: java inheritance methods subclass superclass