如何访问包含在数组列表中的对象的属性,该对象是另一个对象的属性

时间:2019-08-21 00:36:20

标签: java arraylist

我试图引用包含在数组列表中的对象的属性,该列表本身就是另一个对象的属性。

这是代码的简单版本

物品类

public class Item {

    String name;
    String stat;
    int dmg;

    public Item(String name, String stat, int dmg) {
        this.name = name;
        this.stat = stat;
        this.dmg = dmg;
    }

}

单元类

import java.util.ArrayList;

public class Unit {

String unitName;
int unitHealth;
int unitMoves;
int unitDmg;
ArrayList<Item> unitInv;

protected Unit(String name, int health, int dmg, int moves, ArrayList<Item> inv) {
    unitName = name;
    unitHealth = health;
    unitDmg = dmg;
    unitMoves = moves;
    unitInv = inv;
    }
}

游戏课

import java.util.ArrayList;

public class Game {

    public static void main(String[] args) {

        Item testItem = new Item("Test Item", "DMG", 10);

        ArrayList<Item> unitInv = new ArrayList<>();
        Unit unitObj0 = new Unit("Test Unit", 100, 10, 4, unitInv);
        unitInv.add(testItem);
    }

    public void getName() {
        for(int i =0; i < unitInv.size(); i++) {
            System.out.println(i);
        }
    }

}

我试图弄清楚如何具体引用unitInv中包含的testItem的每个属性。我想对访问testItem属性的方法进行编码,并使用它们来修改unitObj0的属性。这样做的目的是,我将更改unitInv中包含的项目,并且我将需要能够编写模块化代码,无论unitInv中包含的项目或项目数量如何,都可以访问相同的信息。

我花了很多时间弄乱for循环,但是我不明白如何使循环访问unitInv中包含的testItem的属性,更不用说我不确定那是否适合在这里做。如果有更好的模块化方法来执行我在此处尝试执行的操作,请在可能的情况下提供详细建议。

2 个答案:

答案 0 :(得分:0)

如果要访问unitInv对象的unitObj0列表中的每个项目,可以尝试以下for循环:

for ( Item item : unitObj0.unitInv ) {
    // use your individual item here 
}

这将允许您访问ArrayList item的每个unitInv,这是unitObj0的属性。

答案 1 :(得分:0)

因此您的代码存在以下问题:

  1. unitInvmain内部定义,因此,不能在其范围之外访问它。您必须在方法之外声明它,或将其引用传递给您正在调用的方法。
  2. 我看不到您在哪里调用getName方法,但我将假定它在main内部。

尝试一下:

import java.util.ArrayList;

public class Game {

    public static void main(String[] args) {
        Item testItem = new Item("Test Item", "DMG", 10);

        ArrayList<Item> unitInv = new ArrayList<>();
        Unit unitObj0 = new Unit("Test Unit", 100, 10, 4, unitInv);
        unitInv.add(testItem);

        getName(unitObj0);
    }

    public void getName(Unit unit) {
        for( Item item : unit.unitInv ) {
            System.out.println(i);
        }
    }
}