0

このメソッドでは、ある配列リストのすべての要素を別の配列リストのすべての要素と比較しようとしています。次に、最初の配列リストの要素が2番目の配列リストのどの要素とも等しくない場合は、その要素を削除します。比較ステップと削除ステップのどちらかが間違っていますが、どちらかわかりません。どんな助けでも大歓迎です。

説明が必要な場合は、遠慮なく質問してください。

public static ArrayList<Integer> compareArrayandList(ArrayList<Integer>compare, ArrayList<Integer>array2) {
    int[] counter = new int[compare.size()];

    for (int x: counter) {
        x = 0;
    }
    for (int i = 0; i < compare.size(); i++) {
        counter[i] = 0;
        for (int number: array2) {
            if (compare.get(i) ==number) {
                counter[i]++;
            }

        }

    }
    for (int i=0; i<counter.length;i++) {
        if (counter[i]==0) {
            compare.remove(new Integer(i));
        }
    }

    return compare;
}

編集:(MementoMori提供)コードが機能しない理由は、要素を削除するとArrayListの位置が変化するためです。要素3を削除したとします。これで、要素3は以前とは異なります。

4

4 に答える 4

0
ListUtils.sum(Arrays.asList(firstarray),Arrays.asList(secondarray))
于 2013-03-15T07:31:00.543 に答える
0

あなたはここで本当にやりたいことをしていません。2 番目の for ループで見つからない位置 i の要素ではなく、値が i である要素を比較配列から削除します。

for (int i=0; i<counter.length;i++) {
    if (counter[i]==0) {
        //compare.remove(new Integer(i));  // problem is here!
        // remove element at index i not element equals to i
        compare.remove(i);
    }
}
于 2013-03-15T07:31:26.547 に答える
0

カウンター配列は必要ありません。イテレータを使用すると、1 つのステップで比較を行うことができます。私はこれがうまくいくと信じています:

public static ArrayList<Integer> compareArrayandList(ArrayList<Integer>compare,   ArrayList<Integer>array2) {
    ListIterator<Integer> iter = compare.listIterator(compare.size());
    while (iter.hasPrevious()){
        Integer a = new Integer(iter.previous());
        for (int number: array2) {
            if (a==number) iter.remove();
        }        
     }
return compare;
}

編集:コードが機能しない理由は、要素を削除すると ArrayList 内の位置が変化するためです。要素 3 を削除したとします。要素 3 は以前とは異なります。

于 2013-03-15T07:32:22.553 に答える
0
public class Test {

    public static ArrayList<Integer> compareArrayandList(ArrayList<Integer>compare, ArrayList<Integer>array2) {
        ArrayList<Integer> a3 = new ArrayList<Integer>();               
        for (Integer a : compare)
        {
            if(array2.contains(a))
                a3.add(a);
        }
            System.out.println(a3);
        return a3;
    }

    public static void main(String[] args) {
        ArrayList<Integer> a1=new ArrayList<Integer>();
        ArrayList<Integer> a2=new ArrayList<Integer>();
        a1.add(1);
        a1.add(5);
        a1.add(3);
        a2.add(3);
        a2.add(4);
        a2.add(5);
        a2.add(6);
        Test test=new Test();
        test.compareArrayandList(a1,a2);

    }

}
于 2013-03-15T07:37:48.883 に答える