我有一个ArrayList,它包含10个元素和一个变量int = 12。现在,我想要计算array中有多少个元素,如果小于12,则从0再开始计数,然后停止到索引2并删除它,直到数组中有一个元素。我尝试了以下几点:
int j = 12;
int l = 0;
// Here I check if j is less than array.size
while (j < array.size()) {
for (int i = 0; i < array.size(); i++) {
if (j == i + 1) {
array.remove(i);
}
}
}
// Here is for j greater than array.size
while (array.size() != 1) {
for (int i = 0; i < array.size(); i++) {
l = j - array.size();
if (l < array.size()) {
array.remove(l);
}
}
}
System.out.println(array);更新:
MyArray = {1,2,3,4,5,6,7,8,9,10};
int=12;MyArray只包含10元素,但是我想删除带有数字12的索引,只要索引12不存在,我就应该开始从零开始计数,并且数字12位于索引2,这就是为什么我应该删除带有数字2的索引。第二次迭代MyArray只包含9元素,而12-9=3则应该删除带有数字3的索引,直到在MyArray中只有一个元素为止。
发布于 2016-01-18 13:07:07
对最新问题的答复:
当您有一个长度为10的列表,并且要删除“12元素”时,可以使用模运算符:
ArrayList<...> someList = ...;
int toDelete = 12;
int deleteInRange = toDelete % someList.size();
someList.remove(deleteInRange);模运算符将传递整数除以12 / 10 (toDelete % someList.size())的其余部分。
可以在循环中使用此代码段以删除多个元素。
发布于 2016-01-18 13:01:16
不要在数组中循环两次以删除最后的n个元素,直到列表的长度等于j,您可以简单地使用:
while (j < array.size()) {
array.remove(j - 1);
}如果您总是希望删除索引2,则可以:
while (array.size() >= 3) { // otherwise you will get a ArrayIndexOutOfBoundsException
array.remove(2);
}但是,ArrayList中将保留两个元素,而不是1(索引0和1)。此时不能删除μndex 2,因为它不再是有效的索引。
因此,之后可以删除索引0/1,也可以删除我认为要实现的目标:
while (array.size() >= 2) { // otherwise you will get a ArrayIndexOutOfBoundsException
array.remove(1);
}然后,在索引0处,列表中只保留一个元素。
编辑:关于你的问题的更新,它是
int originalSize = array.size();
while (array.size() >= originalSize - j) { // otherwise you will get a ArrayIndexOutOfBoundsException
array.remove(originalSize - j);
}但是,列表中总是会留下size - j项。例如,除非列表中只有一个元素,否则不能删除索引3。
发布于 2016-01-18 13:36:27
如果您总是希望删除索引2,则可以:
l = j - array.size();将这一行更改如下:
int sum = 0;
sum = l - array.size();
if (sum > 0) {
array.remove(sum);
} else {
sum = array.size() - l;
array.remove(sum);
} https://stackoverflow.com/questions/34855198
复制相似问题