【问题标题】:How to access data in an object from an ArrayList? [duplicate]如何从 ArrayList 访问对象中的数据? [复制]
【发布时间】:2018-06-28 19:53:51
【问题描述】:

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

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

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

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

我遇到的问题是,我需要为火车中的每个 Boxcar 将字符串 c 更改为其他内容。我想我需要一个 for each 循环,所以我现在拥有的是:

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

这当然不能编译,因为它需要 int u 和 boolean r 的值。如何访问字符串 c?对不起,我的编程很笨,我希望我足够具体。

【问题讨论】:

  • Boxcar 类中为 String c 实现一个设置器,以便您可以操纵它并更改它的值。
  • BoxCar 的实现是什么?它没有 String c 的 getter/setter 吗?
  • 请问可以给我们完整的Boxcar 代码吗?

标签: java


【解决方案1】:

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

您想要更改 Boxcar 对象的值,您通常会使用 setter:

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

这假定您的 Boxcar 类具有 getter 和 setter:

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

【讨论】:

    【解决方案2】:

    标准做法是在您的类中为您希望在实例化该类的对象后获取或更改的变量设置 getter/setter。

    所以在你的 Boxcar 类中你会有类似的东西

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

    这使您可以将变量 u 保持为私有,同时仍然可以通过这些 getter 和 setter 进行访问。 然后,您可以使用您的 for 循环循环通过您的 ArrayListBoxcars 并调用您希望更改的值的 setter 方法并相应地执行此操作。

    作为旁注,我建议您将变量名称 cur 更改为更人性化的名称,因为这些名称并不能说明这些值的含义。

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 2021-07-17
      • 2022-10-02
      相关资源
      最近更新 更多