gpt4 book ai didi

java - 我无法获取数组列表中的对象

转载 作者:行者123 更新时间:2023-12-02 12:09:53 27 4
gpt4 key购买 nike

在我的代码中,我有一个名为 Game 的父类(super class)及其子类 TowerTower 还有一个名为 Catapult 的子类。Catapult 子类如下所示:

public class Catapult extends Tower {
public Catapult(){
super(5,3);
}
}

它使用常量整数值 5 和 3 调用 Tower 构造函数。然后,其父类(super class) Tower 如下所示:

public class Tower extends Game {
private int damage;
private int timeStep;
private int position;
private boolean willFire;

public Tower(int damage, int timeStep){
super.addTower(damage,timeStep);
}
public Tower(int damage, int timeStep, int position,boolean willFire){
this.damage = damage;
this.timeStep = timeStep;
this.position = position;
this.willFire = willFire;
}
public void getDamage(){
super.printDamage();
}

}

现在,有了损坏值和 timeStep(5 和 3),Tower 调用它的 super 构造函数(Game):

import java.util.ArrayList;
public class Game {
private ArrayList<Enemy> enemies = new ArrayList<Enemy>();
private ArrayList<Tower> towers = new ArrayList<Tower>();
private int corridorLength;
private int currentPosition = 0;

public Game(){}

public Game(int corridorLength){
this.corridorLength = corridorLength;
}

public void addTower(int damage,int timeStep){
this.towers.add(new Tower(damage,timeStep,this.currentPosition,true));
// Add tower with current position corrdor length
System.out.println("Tower added in addTower!");}

public void printDamage(){
System.out.println(this.towers.get(this.currentPosition)); // How to get the damage item?
}
}

因此,对象 Tower 及其值被存储在数组 tower 中(至少我是这么认为的)。因此,如果有一个名为 towers 的非空数组,其大小至少为 1,我在这里面临一些问题。第一:当我调用 Tower.getDamage() 方法时,它最终会调用 Game 类中的方法,该方法仅在索引处打印对象 Tower 0.但是当我尝试以其他方式执行此操作时,例如像这样在 Game 类中打印对象(直接从 Game 类调用,而不是通过其调用子类):

public void getDamage(){
System.out.println(this.towers.get(this.currentPosition));
}

它抛出超出范围的数组异常,我没有得到这个异常,因为数组塔应该有一个对象存储在索引 0 处。

第二:如何获取索引 0 处的对象(Tower)内的实际整数?所以,我不能这样做:

this.towers.get(0).damage

最佳答案

您的主要问题似乎是您想要使用 Game 类中的 Tower 对象。一个问题是您错误地使用了继承,我将在稍后解决这个问题。另一个更重要的问题涉及创建对象。您使用

正确创建了 ArrayList 对象
private ArrayList<Tower> towers = new ArrayList<Tower>();

但是,您永远不会创建任何 Tower 对象。确保拥有一些 Tower 对象的一种方法是在构造函数中创建它们并将它们添加到列表中:

public Game(int corridorLength){
this.corridorLength = corridorLength;

this.towers.add(new Tower());
}

如果您想添加多个塔,您可能应该使用 for 循环来实现。我将详细信息留给读者作为练习。

现在您的列表中有一个塔对象(或多个),但 damage 字段是私有(private)的。为了访问它,您应该向您的 Tower 类添加一个“getter”方法:

public int getDamage() {
return damage;
}

现在您可以从列表中获取一座塔:

Tower t = towers.get(0);

并获取其伤害值:

int damage = t.getDamage();
<小时/>

关于继承的注意事项

在我看来,您对如何使用继承感到困惑。继承通常称为“is a”关系。问自己一个简单的问题:塔是一款游戏吗?如果答案是"is",那么继承可能是合适的。如果答案是否定的,那么继承肯定是不合适的。

在这种情况下,在我看来,塔不是游戏。另一方面,游戏塔。这表明 Game 类应该包含一个 Tower 成员变量(或字段):

public class Game {
private Tower tower;
}

类似地,塔有一个弹射器,因此Tower类应该包含一个Catapult成员字段。由于 TowerCatapult 都不是 Game,因此这些类不应该扩展 Game.从两个类中删除 extends Game 子句。

关于java - 我无法获取数组列表中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46624622/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com