- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在做一个正在尝试调试的任务。我有很多error: (method name) in class (SuperClass Name) cannot be applied to given types;
。该项目正在将针对过程编程的游戏改用于同一游戏,但现在针对OOP。我是Java的新手,并负责创建许多类,其中有两个是Superclass的子类(很明显),并且已为我提供了什么方法及其参数。我遇到的问题是子类中的一种方法应该控制两个角色(玩家和敌人)之间的战斗。这两个类都是字符类(超类)的子类。由于这是班级作业,因此我不想发布所有内容,但以下是我尝试执行的战斗方法的示例。我一直遇到的问题,以及与“继承性”有关的问题,仍然是父/子类之间继承的,以及如何在每个子类之间传递某些值/变量。
在下面的示例代码中,此方法嵌套在扩展Player
类的Character
类中。此方法需要使用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
并在自身内部引用该对象,如果这有意义吗?我试图可视化编译器将如何执行此任务,并且无法想象这种工作方式。
Enemy
子类,攻击方法依赖于
Character
超类。因此,在上面的代码示例中,我希望它能阐明3.b。我的问题。需要任何其他信息,请让我知道。
最佳答案
由于定义了attack(Player _player)
,这意味着您仅允许传递Player
对象,但是您正在使用类似Player.attack(_enemy)
的方法,这意味着传递Enemy
对象,从而导致编译错误。
您需要更正此问题。阅读我的段落“放在一边……”。
方法warWizard中的第6行(注释中的#1问题)-自此
方法驻留在Player类中,我可以在其中引用Enemy类吗
这边走?如果没有,有什么更好的方法?
根据您的代码示例,int updWizHP = _enemy.getHitPoints();
是一个有效且明智的调用,如果您想获取敌人的生命值。 _enemy
是您的Enemy对象,您可以在其上使用任何方法,只要该方法存在于该类中即可。
方法warWizard中的第12行(注释中的#2问题)-我该如何
引用一个类时,该类使用自己的名称创建了一个对象
方法(代码示例)是否在类本身中?我想拿
最终用户的播放器播放器,并在其自身内引用该对象(如果有)
这就说得通了?我试图形象地看一下编译器将如何
执行此任务,无法想象它会一直工作。
由于Player
扩展了Character
,因此您将在attack
类中继承Player
方法(可视化为在attack
类中定义Character
方法)。因此,您实际上不需要使用updWizHP = Player.attack(_enemy);
,而只需使用updWizHP = attack(_enemy);
。但是,这是一个编译错误,请阅读答案的第一部分和最后一部分。
现在,由于attack
方法未使用Player
类的任何实例字段(Player
类的状态),因此您不必担心,但是如果是这样,则必须考虑并决定在哪个Player
您要调用attack
方法的类对象。
从底部开始的13行(注释中的#3问题参考):a)您可以
将方法作为参数传递给Java中的另一种方法? b)
是调用另一个子类的正确方法(与
这样的人,甚至有可能吗?
对于#3.a:使用decreaseHitPoints(_enemy.attack(Player));
您没有将方法传递给另一个方法,但首先会评估_enemy.attack(Player)
,并且在您的代码中将返回int
并将该值传递给decreaseHitPoints
。
对于#3.b:您没有调用任何子类,而是在对象上调用方法,则该对象表示的类是否位于继承树中都没有关系。您只需要确保它是一个逻辑调用并且该方法存在于类中就可以了。
我想_enemy.attack(Player)
会给您编译错误,因为您没有将Player
定义为对象引用变量。您必须使用一些变量,不能使用这样的类名。更好地使用_enemy.attack(this)
_enemy.attack(Player)
这表明,在攻击方法中,您想传递一个Player
对象,现在要么使用_enemy.attack(this)
,这意味着传递当前正在调用battleWizard
的对象(有意义),或者使用_enemy.attack(new Player())
表示创建Player
类的新对象并传递该对象。
顺便说一句,我认为您最好将public int attack(Player _player){
定义为public int attack(Character _character){
,因为将来像这样,您可以使用attack
方法来传递Enemy
对象或Character
的某些子类。
那就是“继承”和“程序到接口”的美。我建议您搜索并了解这两个概念。
可能没有您注意到的快速注释(这些是试图公开主题/概念的一般性注释,可能会有更多限制行为,因此请阅读每个主题/概念的更多信息):
对象是类的运行时表示。
父类的方法由子类继承,如果要从同一个类进行调用,则无需使用对象即可调用它们。将其可视化为在同一类中定义该方法(有关上下文的更多信息,请参见上下文公共v / s受保护的v / s私有方法)。
您可以覆盖继承的方法。
可以使用其任何子类的对象调用接受超类型的方法。例如,在您的情况下,giveMeAnyCharacter(Character char)
可用作giveMeAnyCharacter(new Person())
或giveMeAnyCharacter(new Enemy())
。
在Java中,this
表示当前对象或实例,而super
表示超类。因此,或者创建一个新对象,或者如果您想使用与您正在工作的对象相同的对象,请使用this
。
始终将所有通用代码(方法或实例字段)放在超类中,并让子类通过继承利用它。
关于java - Java:在自己的方法中引用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33714114/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!