-1

arrayList の末尾にある数値の繰り返しを削除する再帰メソッドを作成することになっています。考えられるすべてのエラーでベースをカバーしたような気がしますが、3回目の処理で範囲外エラーが発生します。範囲外エラーが発生する理由がわかりません。すべてのカウントが正しい位置にとどまっているようで、カウンターの位置が等しくなったら再帰を使用する 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


        }
      }
    }
4

2 に答える 2