Java add(int索引,元素)不';我似乎无法移动元素
我有一长串卡片对象。如果用户遗漏了一个问题,我希望将同一类别的卡移动到下一个插槽。接下来的列表以一种错开所有分类的方式进行排序,以便下一个问题都是不同的 我有一个排序方法,它应该在列表中的当前位置和下一个元素的所需类别中进行排序,并将该类型元素的下一次出现移动到当前位置之后 我看不出这个算法有什么问题,所以我认为可能是我使用的ArrayList方法错了。然而,在看了这些文档之后,它们似乎应该像预期的那样工作 我已经测试了这个列表,在它被认为排序后,什么都没有移动,但是这个列表确实包含了我正在寻找的类别Java add(int索引,元素)不';我似乎无法移动元素,java,sorting,data-structures,Java,Sorting,Data Structures,我有一长串卡片对象。如果用户遗漏了一个问题,我希望将同一类别的卡移动到下一个插槽。接下来的列表以一种错开所有分类的方式进行排序,以便下一个问题都是不同的 我有一个排序方法,它应该在列表中的当前位置和下一个元素的所需类别中进行排序,并将该类型元素的下一次出现移动到当前位置之后 我看不出这个算法有什么问题,所以我认为可能是我使用的ArrayList方法错了。然而,在看了这些文档之后,它们似乎应该像预期的那样工作 我已经测试了这个列表,在它被认为排序后,什么都没有移动,但是这个列表确实包含了我正在寻找
public static void sortCategoryToNext(ArrayList<Card> cardlist,String cat,int currentIndex){
boolean sorted = false;
int i = currentIndex;
int insertionpoint = i;
do {
i++;
Card nextCard = cardlist.get(i);
if(nextCard.getCategory().equals(cat)){
sorted = true;
cardlist.add(insertionpoint,nextCard);
cardlist.remove(nextCard);
}
}while(!sorted);
}
publicstaticvoidsortcategorytonext(arraylistcardlist,stringcat,int-currentIndex){
布尔排序=假;
int i=当前索引;
int insertionpoint=i;
做{
i++;
Card nextCard=cardlist.get(i);
if(nextCard.getCategory().equals(cat)){
排序=真;
cardlist.add(insertionpoint,nextCard);
cardlist.remove(nextCard);
}
}而(!排序);
}
删除对象的第一个匹配项,该对象位于刚刚插入该对象的列表位置
与此相反:
cardlist.add(insertionpoint,nextCard);
cardlist.remove(nextCard);
试试这个:
cardlist.remove(i);
cardlist.add(insertionpoint,nextCard);
作为一种改进,上面的代码还使用了,这应该更有效,因为它不必遍历列表来查找匹配项。删除对象的第一个匹配项,该对象位于刚刚插入该对象的列表位置
与此相反:
cardlist.add(insertionpoint,nextCard);
cardlist.remove(nextCard);
试试这个:
cardlist.remove(i);
cardlist.add(insertionpoint,nextCard);
作为一种改进,上面的代码还使用了,这应该更有效,因为它不必遍历列表来查找匹配的项。您只需反转
添加
和删除
函数即可。在这里,您正在删除刚才添加的卡,因为remove
删除了第一次出现的卡。您只需反转add
和remove
功能即可。在这里,您正在删除刚才添加的卡,因为remove
删除了第一次出现的卡。