Java 将从arraylist放入数组,并在for循环中删除它
所以我想从ArrayList中删除整数,我已经把它放入普通数组中了 我现在得到的是:Java 将从arraylist放入数组,并在for循环中删除它,java,arrays,arraylist,Java,Arrays,Arraylist,所以我想从ArrayList中删除整数,我已经把它放入普通数组中了 我现在得到的是: int[] playersArray = null; ArrayList<Integer> spelers = new ArrayList<Integer>(); int[]playersArray=null; ArrayList spelers=新的ArrayList(); 你在这里看到的table.length是桌子的数量,table[j]。length是每个桌子可以得到的
int[] playersArray = null;
ArrayList<Integer> spelers = new ArrayList<Integer>();
int[]playersArray=null;
ArrayList spelers=新的ArrayList();
你在这里看到的table.length是桌子的数量,table[j]。length是每个桌子可以得到的玩家数量。它工作得很好,但是它从PlayerList中删除了错误的整数,它删除了下一个整数,而不是放入playerArray的整数
for(int j = 0; j < table.length; j++){
playersArray = new int[table[j].length];
for(int i = 0; i < table[j].length; i++){
playersArray[i] = playersList.get(i);
playersList.remove(i);
}
table[j] = playersArray;
System.out.println("tafel: " + (j+1) + " " + Arrays.toString(tafel[j]));
}
for(int j=0;j
看看你的循环:
for(int i = 0; i < table[j].length; i++){
playersArray[i] = playersList.get(i);
playersList.remove(i);
}
for(int i=0;i
在i==0
处,从playersList
中删除项目0。这会将所有后续元素向下移动一个,将项目1移动到0,将项目2移动到1,依此类推。然后将i
增加到1。现在您get(i)
,它生成项目1,但这是新的项目1。旧项目1已移动到项目0!此时您正在检索旧项目2
这是一个示例,说明了为什么在迭代集合时不应在结构上更改集合。来自以下文档:
删除此列表中指定位置的元素将任何后续元素向左移动(从其索引中减去一个)。
所以如果你的playersList
是这样的
playersList[0] = 1
playersList[1] = 2
playersList[2] = 3
playersList[3] = 4
在playersList之后。删除(0)
列表将被删除
playersList[0] = 2
playersList[1] = 3
playersList[2] = 4
因此,下一个操作(playersList.remove(1)
)将不会在正确的元素上执行
如果您必须循环所有元素,您可以使用playersList.remove(i)
替换为playersList.remove(0)
,对于playersList.get(i)
,正如其他人所解释的,您在移除每个元素时正在折叠列表,导致迭代跳过元素。以下是几种备选方案:
1) 继续拉出第一个元件:
for(int i = 0; i < table[j].length; i++){
playersArray[i] = playersList.remove(0);
}
3) 如果不希望或不需要剩余元素,则可以通过索引获取每个元素,并在完成后清除列表:
for(int j = 0; j < table.length; j++){
...
for(int i = 0; i < table[j].length; i++){
playersArray[i] = playersList.get(i);
}
...
}
playersList.clear();
for(int j=0;j
所有这些解决方案都假设playersList
有足够的元素来填充表
,就像您在示例中所做的那样。您是否尝试阅读ArrayList#remove
的功能以及列表内容的行为?只需使用中的一种方法,然后清除playersList
,然后再显示表的声明。
for(int j = 0; j < table.length; j++){
...
for(int i = 0; i < table[j].length; i++){
playersArray[i] = playersList.get(i);
}
...
}
playersList.clear();