2017-08-08 3 views
0

私は長いリストのCardオブジェクトを持っています。ユーザーが1つの質問を逃した場合は、同じカテゴリのカードを次のスロットに移動してほしい。来るべきリストは、すべてのカテゴリーをずらして並べ替えているので、次の質問はすべて違います。ArrayList.add(int index、element)は要素を移動していないようです

リストの現在の位置と次の要素の目的のカテゴリを取り、そのタイプの要素の次の出現を現在の位置の直後に移動するソート方法があります。

私はこのアルゴリズムが間違っているとは思わないので、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); 
     } 
+1

'add'と' remove'関数を逆にするだけです。ここでは、前に追加したカードを削除します。これは、 'remove'が最初のオカレンスを削除するためです。 – jeanr

答えて

2

ArrayList.remove(Object)あなただけの、そのオブジェクトを挿入していた時にリスト位置にあるオブジェクトの最初発生を削除します。これに代えて

   cardlist.add(insertionpoint,nextCard); 
       cardlist.remove(nextCard); 

これを試してみてください。改良として

   cardlist.remove(i); 
       cardlist.add(insertionpoint,nextCard); 

を、上記のコードはまた、反復処理する必要がないので、より効率的であるべきで、ArrayList.remove(int)使用しています一致するアイテムを見つけるためのリスト

関連する問題