我有5分,我需要删除2分,共计3分。我需要从1-5中删除所有可能组合的两个点。例如:0,0 - 0,1 - 0,2 ... 5,1 5,2 ..到最后。
for (int i = 0; i < newList.size()-1; i++){
count = 0;
ArrayList<Point> testList = new ArrayList<Point>(newList);
while (count < K-1){
testList.remove(i+1);
count++;
}
这就是我所拥有的。问题是,当我删除第一个点时,下一个点的索引会发生变化,所以我很难跟踪它。
我想像这样使用双循环:
for (int i = 0; i < newList.size(); i++){
for (int j = 0; j < newList.size()-1; j++){
count = 0;
ArrayList<Point> testList = new ArrayList<Point>(newList);
while (count < K-1){
testList.remove(i);
testList.remove(j);
count++;
}
但是,我仍然得到以下内容:
REMOVED: 0, 0
REMOVED: 0, 1
REMOVED: 0, 2
REMOVED: 0, 3
REMOVED: 1, 0
REMOVED: 1, 1
REMOVED: 1, 2
REMOVED: 1, 3
REMOVED: 2, 0
REMOVED: 2, 1
REMOVED: 2, 2
REMOVED: 2, 3
REMOVED: 3, 0
REMOVED: 3, 1
REMOVED: 3, 2
REMOVED: 3, 3
REMOVED: 4, 0
REMOVED: 4, 1
REMOVED: 4, 2
REMOVED: 4, 3
正如您所看到的,在两列中打印出“5”都存在问题,因为当我第一次删除时索引会发生变化。任何人都可以提供任何建议吗?
答案 0 :(得分:0)
要完成此操作,请使用之前创建的newList
作为参考,并删除您已创建的testList
元素。
while (count < K-1){
testList.remove(newList.get(i+1));
count++;
}
这种方式newList
将保持不变,并且在删除元素后,所有元素(即Point
)和testList
都会包含元素。
答案 1 :(得分:0)
通过标准库(例如guava collections)或手动复制制作过滤后的副本:
List<Point> original = ...
List<Point> cleared = new ArrayList<Point>(original.size());
Set<Integer> dropIndex = new TreeSet<Integer>(Arrays.asList(2, 5, 128));
for (int i = 0, size = original.size(); i < size; i++)
if (!dropIndex.contains(i))
cleared.add(original.get(i));