如何从ArrayList访问对象中的数据?

时间:2018-01-19 14:33:26

标签: java

例如,我有一个名为Boxcar的自定义类,使用如下:

public Boxcar(String c, int u, boolean r)

在另一个类中,我初始化一个名为train的Boxcars的ArrayList,如下所示:

private ArrayList<Boxcar> train = new ArrayList<Boxcar>();

我遇到的问题是,我需要为列车中的每个Boxcar更改String c。我想我每个循环都需要一个,所以我现在拥有的是:

public void setCargo(String replace)
{
    for(Boxcar b: train)
    {
        b = new Boxcar(replace);
    }
}

当然不能编译,因为它需要int u和boolean r的值。我怎样才能访问String c?对于noobish编程很抱歉,我希望我足够具体。

2 个答案:

答案 0 :(得分:1)

for循环中的代码不会更改列表中的任何内容。它只是将新车分配给局部变量b(前提是它正确地称为构造函数),保持数组列表不变。

你想要的是改变Boxcar个对象的值,你通常会用setter做这个值:

for(Boxcar b: train) {
    b.setC(replace);
}

这假定您的Boxcar班级有吸气剂和制定者:

public Boxcar(String c, int u, boolean r){
   //constructor code
}
public getC(){
    return this.c;
}
public setC(String c){
    this.c = c;
}

答案 1 :(得分:0)

标准做法是让类中的getter / setter用于您希望获取的变量,或者在实例化该类的对象后更改。

所以在Boxcar课程中你会有类似

的内容
public int getU() {
    return u;
}

public void setU(int newValue){
    this.u = newValue;
}

然后,您可以将变量u保密,同时仍然可以通过这些getter和setter进行访问。 然后,您可以使用for循环来循环浏览ArrayList Boxcars并调用setter方法,以获取您希望更改的值,并相应地执行此操作。

作为旁注,我建议您将cur的变量名称更改为更人性化的内容,因为这些内容并未说明这些内容是什么价值观意味着