我应该写一个递归方法,删除arrayList末尾的数字的重现。我觉得我已经用所有可能的错误覆盖了我的基础,但是一旦它第三次处理我就会出现一个出界的错误。我似乎无法弄清楚为什么我会出现越界错误。似乎我的所有计数都保持在正确的位置,并且我有一个if语句,一旦计数器位置相等就使用递归,这是我认为错误消息的位置。
任何见解都会有所帮助,需要从错误中吸取教训。递归也不是我的强项。
编辑:这是清单; [100,200,200,300,400,300,100,500,500,400,100,400,100,100]
public static void deleteDuplicateValues(ArrayList<Integer> list, int decreasingCounter, int searchingVal, int outsideCounter)
{
int searchingValue = list.get(searchingVal);
if (outsideCounter < (list.size()-1))
{
if (searchingValue == list.get(list.size()-1-decreasingCounter)) //finds
{
System.out.print (searchingValue + " FOUND at position" + (list.size()-1-decreasingCounter) + "\n");
list.remove(list.size()-1-decreasingCounter);
deleteDuplicateValues(list, decreasingCounter,searchingVal+1, outsideCounter+1);
}
else
{
if (list.size()-1-decreasingCounter == outsideCounter) //gets to end without finding double
{//After searching x amount of times, they will equal eachother if not found.
//outsideCounter only increments when found or end of processing.
decreasingCounter = 0;
deleteDuplicateValues(list, decreasingCounter,searchingVal+1, outsideCounter+1); //goes to next position
}
else
{
System.out.print("executed");
deleteDuplicateValues(list, decreasingCounter+1, searchingVal, outsideCounter); //values UP1
}
}
}
答案 0 :(得分:0)
我找错了你想要删除重复项吗?如果是这种情况,为什么不使用java.util.Set ??
的任何实现Set<Integer> set = new HashSet<Integer>(list);
list.clear();
list.addAll(set);
我无法完全理解索引和计数的全部内容
编辑: 我想我明白了。当你得到这个if语句
if (searchingValue == list.get(list.size() - 1 - decreasingCounter)) {
System.out.print(searchingValue + " FOUND at position" + (list.size() - 1 - decreasingCounter) + "\n");
list.remove(list.size() - 1 - decreasingCounter);
deleteDuplicateValues(list, decreasingCounter, searchingVal + 1, outsideCounter + 1); <<-- HERE!
}
删除一个元素,即使这样,当你进行递归调用时,你会通过删除元素来增加serachingValue,但是你已经移动了。我清楚了吗?
答案 1 :(得分:0)
您可以简化不变量。方法参数中所需要的只是整数列表和要删除的数字的值,只有两个参数。我不明白为什么你需要所有其他人 - 尝试简化它你会破解它。