我必须使用for循环填充一个ArrayList,其中前10个为2的倍数。我真的无法弄清楚我是如何使用任何其他循环的。
这是我的代码无效。
ArrayList<Integer> arraylist = new ArrayList<Integer>(10);
for (Integer y : arraylist) {
arraylist.add( (2+(y*2)));
}
答案 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)));
}