You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Processing中遍历ArrayList对象并将属性存入数组的实现疑问

解决ArrayList遍历并提取属性到数组的问题

嘿,我来帮你捋清楚这个问题~你的两种写法都存在逻辑问题,我先帮你分析下,再给出正确的实现方式:

先说说你现有写法的问题

  • 写法1的问题:你嵌套了两层循环,外层增强for循环每次拿到一个bob对象,内层循环会把这个对象的name赋值给names数组的所有10个位置。结果就是遍历完整个ArrayList后,names数组里全是最后一个bob对象的name值,完全达不到“按顺序存入”的目的。
  • 写法2的问题:b[i].name是错误的语法,因为b是ArrayList中的单个bob对象,不是数组或者可通过索引访问的集合,所以不能用[i]去操作它,这会直接导致编译报错。

正确的实现方式

这里给你几种常用的正确写法,根据你的习惯选择就行:

方法1:增强for循环 + 计数器

用一个计数器来记录数组的当前索引,遍历每个bob对象时把name存入对应位置:

// 先初始化数组,长度和ArrayList的大小一致(如果确定是10个也可以写new int[10],但size()更通用)
int[] names = new int[bob.size()];
int currentIndex = 0;

for (bob b : bob) {
    names[currentIndex] = b.name;
    currentIndex++;
}

方法2:普通for循环(通过索引访问)

直接用索引同时遍历ArrayList和数组,一一对应赋值:

int[] names = new int[bob.size()];

for (int i = 0; i < bob.size(); i++) {
    // 通过get(i)获取ArrayList中对应索引的bob对象
    bob currentBob = bob.get(i);
    names[i] = currentBob.name;
}

方法3:Java 8+ Stream API(简洁写法)

如果你的项目用的是Java 8及以上版本,可以用Stream一行搞定:

int[] names = bob.stream()
                 .mapToInt(b -> b.name) // 提取每个对象的name属性转为int流
                 .toArray(); // 把流转为数组

额外的小建议

  • 遵循Java命名规范:类名首字母要大写,比如bob类应该改成Bob;ArrayList的变量名可以改成bobList,避免和类名混淆,提升代码可读性。
  • 封装原则:如果name是Bob类的私有属性,建议通过getter方法(比如b.getName())来访问,而不是直接访问成员变量,这是更好的编程习惯。

内容的提问来源于stack exchange,提问作者Running Bird

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:32:20