循环遍历对象变量的arraylist并将它们输入到Processing中的数组中

时间:2018-04-18 03:36:49

标签: processing

这是我的代码的一部分,我有一个包含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。我是一名初学程序员,请原谅我缺乏编程知识。如果有人能够至少让我知道从哪里开始,这将是非常有帮助的。提前谢谢!

2 个答案:

答案 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] );
  }

}