这是我的代码的一部分,我有一个包含10个对象的ArrayList,名为" bob"我想循环遍历它们,以便将它们的每个名称(在bob类中定义的局部整数)放入名为" name"的数组中。按顺序。
for (bob b : bob) {
for (int i = 0; i < 10; i++){
names[i] = b.name;
}
}
我试过这种方法:
for (bob b : bob) {
for (int i = 0; i < 10; i++){
names[i] = b[i].name; //I added the "[i]" after b attempting to loop through
//the arraylist but it does not work
}
}
语法似乎不允许我循环遍历像这样的对象的arraylist。我是一名初学程序员,请原谅我缺乏编程知识。如果有人能够至少让我知道从哪里开始,这将是非常有帮助的。提前谢谢!
答案 0 :(得分:1)
处理ArrayList时,您需要使用 set() 和 get() 访问其内容的方法。这是尝试重新创建你所描述的场景的一种有点愚蠢的尝试。希望它有所帮助。
class Bob {
int name;
Bob() {
this.name = floor(random(10000));
}
}
void setup(){
ArrayList<Bob> alb = new ArrayList<Bob>();
for(int i = 0; i < 50; i++){ //populate ArrayList
alb.add(new Bob());
}
int[] names = new int[10];
for(int i = 0; i < names.length; i++){
names[i] = alb.get(i).name; // use get() method
}
for(int i = 0; i < names.length; i++){
print(names[i]);
print('\n');
}
}
答案 1 :(得分:0)
您的问题强调了两种迭代集合的技术:有或没有索引。每个都最适合不同的数据结构和场景。决定何时使用其中一种,需要一些经验,这也是个人风格的问题。
通常编写类似for( int x: myInts )
的代码,然后意识到您想要当前项目的索引,该索引不可用。或者相反,编写像for( int i=first; i<last; i++)
这样的代码然后变得烦躁,因为确定第一个和最后一个是乏味的,或者容易出错。
请注意,您的代码是双嵌套循环。它表示&#34;遍历集合Bob中的每个项目,然后针对每个项目迭代名称集合中的每个项目&#34;。因此,如果鲍勃有10个项目,这将总共迭代100次,可能不是你想要的。您需要重写为单个非嵌套for循环...
如果您决定在没有索引的情况下进行迭代,那么names
应该是某种类型的列表,您可以使用append()
添加项目。考虑处理中可用的StringList
。否则,如果您决定使用索引进行迭代,那么names
可能是一个数组,但如果它已经填充了您希望覆盖的旧值,它仍然可以是一个列表。以下显示了这两种技术:
void setup()
{
ArrayList<String> baseList = new ArrayList<String>(10);
for( int i=0; i<10; i++ )
baseList.add( i, Integer.toString( i + (i*10) ) );
// Approach 1: Iterate without an index,
// build a list with no initial allocation and using append()
StringList namesList = new StringList();
for( String s : baseList )
{
namesList.append( s );
println( namesList.get( namesList.size()-1 ) );
}
// Approach 2: Iterate with an index,
// build a list using preallocation and array access
String[] namesArray = new String[10];
for( int i=0; i<10; i++ )
{
namesArray[i] = baseList.get(i);
println( namesArray[i] );
}
}