我有一个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
的索引,直到{{1}中只有一个元素}}
答案 0 :(得分:1)
不是在数组中循环两次以删除最后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处)。此时无法删除“指数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。
答案 1 :(得分:0)
更新问题的答案:
如果您有一个长度为10的列表,并且您想要删除&#34;第12个元素&#34;你可以使用模运算符:
ArrayList<...> someList = ...;
int toDelete = 12;
int deleteInRange = toDelete % someList.size();
someList.remove(deleteInRange);
模运算符将提供12/10整数分区的其余部分(toDelete % someList.size()
)
您可以在循环中使用此代码段,以便删除多个元素。
答案 2 :(得分:-1)
如果您始终想要删除索引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);
}