如何为每个循环填写一个ArrayList? (JAVA)

时间:2015-04-09 16:22:22

标签: java

我必须使用for循环填充一个ArrayList,其中前10个为2的倍数。我真的无法弄清楚我是如何使用任何其他循环的。

这是我的代码无效。

   ArrayList<Integer> arraylist = new ArrayList<Integer>(10);  
   for (Integer y : arraylist) {
         arraylist.add( (2+(y*2)));      
   }

7 个答案:

答案 0 :(得分:6)

解决方案很简单

final int[] numbers = new int[] {2,4,6,8,10,12,14,16,18,20};
final List<Integer> list = new ArrayList<Integer>();
for (int number : numbers) {
    list.add(number);
}

答案 1 :(得分:4)

你的循环遍历arrayList中的所有值,因为它是空的,循环中的部分实际上从不运行。使用

for(int i = 0 ; i < 10 ; i++)
     arrayList.add(2 * (i + 1));

代替

答案 2 :(得分:4)

这样的事可能吗?

IntStream.range(0, 10).map(y -> 2 + y * 2).forEach(arraylist::add);

答案 3 :(得分:3)

我要解决的问题是,这里的每个人都大部分都在掩饰:普通for语句与增强型for语句之间存在关键区别。

增强型 - for被定义为in the JLS作为语法糖。你得到的糖取决于你的迭代次数。

  • 如果你像Iterable一样迭代ArrayList,那么它正在使用该实体的Iterator

    for(I #i=Expression.iterator(); #i.hasNext();){
        VariableModifiersopt TargetType Identifier=
        (TargetType) #i.next();
        Statement
    }
    
  • 如果您正在迭代一个数组,那么它就是习惯做的常见for语句的简写。

    T[] #a = Expression;
    L1: L2: ... Lm:
    for (int #i = 0; #i < #a.length; #i++) {
        VariableModifiersopt TargetType Identifier = #a[#i];
        Statement
    }
    

因此,增强型 - for有一个假设:

您要迭代的内容必须是非空的集合或数组。

该语句仅用于迭代现有的元素,而不是提供迭代添加新元素的方式或接口。

有很多方法可以解决这个问题,但最简单的方法是使用for语句。

ArrayList<Integer> arraylist = new ArrayList<Integer>(10);  
for (int i = 0; i < 10; i++) {
    arraylist.add( (2+(i*2)));      
}

答案 4 :(得分:1)

您正在使用10作为构造函数参数创建ArrayList,这些参数定义了它的初始容量(默认情况下已经是10 btw),但没有设置任何值。换句话说,您尝试迭代一个空列表,因此永远不会输入它。

您无法通过for-each实现这一目标,您可以使用for实现此目标。

final List<Integer> myList = new ArrayList<>();
for(int i = 1; i <= 10; i++)
   myList.add(2 * i);

答案 5 :(得分:1)

怎么样:

int[] values = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (int i : values) { list.add(i * 2); }

(从评论中偷来的!:))

答案 6 :(得分:1)

与数组不同,ArrayList不会使用对象进行初始化。因此初始化后ArrayList的大小将为零。一个解决方法是从数组创建列表如下:(但这只是一个解决方法)。但即使在这种情况下,List也将使用null进行初始化,而不是使用0进行初始化。所以y将为null。

List<Integer> arraylist = Arrays.asList(new Integer[10]);
        //Collections.fill(arraylist, new Integer(1));
        System.out.println(arraylist);
        int i=0;
        for (Integer y : arraylist) {
             //System.out.println( (2+(y*2)));
             arraylist.set(i++, ((i*2)));      
       }