簡體   English   中英

在2的Java循環中從2的ArrayList中刪除元素

[英]Removing elements from 2 ArrayList in java inside 2 for loops

有N個男孩和N個女孩。 只有一個男孩和一個女孩可以組成跳舞對(即,不允許同性跳舞對)。 成對時的唯一其他條件是它們的絕對高度差應小於或等於K。

找到可以形成的最大對數,以便每個人都有唯一的伙伴。

輸入格式第一行將包含兩個整數N和K。第二行將包含N個整數,N個男孩的高度。 第三行將包含N個整數,即N個女孩的高度。

約束1≤N≤1051≤K≤1091≤男孩或女孩的身高≤109

輸出格式包含最大可能對數的一行。

我的問題是在滿足條件后從拖曳數組中刪除元素。 (存儲兩個數組后)

我使用的第一個算法:

Arrays.sort(ArrBoys);
    Arrays.sort(ArrGirls);
    double count = 0;
    for (int i = 0; i < ArrGirls.length; i++) {
        for (int j = 0; j < ArrBoys.length; j++) {
            if ((int) Math.abs(ArrBoys[j] - ArrGirls[i]) <= k) {
                ArrBoys[j] = 0;
                ArrGirls[i] = 0;
                count++;
                break;
            }
        }
    }
    System.out.println((int) count);

這絕對是錯誤的,因為我們需要刪除該元素而不是使其為零,所以我意識到我需要將它們轉換為ArrayLists。 然后我來了這個代碼:

double count = 0;
    int dif = 0;
    for (Integer ArrGirl : ArrGirls) {
        loop1:
        {
            for (Integer ArrBoy : ArrBoys) {
                dif = (int) Math.abs(ArrBoy - ArrGirl);
                if (dif <= k) {
                    System.out.println("we took " + ArrBoy + " from boys with "
                    + ArrGirl + " from girls, thier dif is " + dif);
                    ArrBoys.remove(ArrBoy);
                    ArrGirls.remove(ArrGirl);
                    count++;
                    break loop1;
                }
            }
        }
    }
    System.out.println((int) count);

使用這種算法給我這樣的異常:

Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) at java.util.ArrayList$Itr.next(ArrayList.java:851)

在我搜索了此異常之后,我發現我應該在使用remove方法時使用Iterator,然后我使用了以下代碼:

double count = 0;
    int dif = 0;
    Iterator<Integer> iteB = ArrGirls.iterator();
    Iterator<Integer> iteG = ArrGirls.iterator();
    while (iteG.hasNext()) {
        int value2 = iteG.next();
        while (iteB.hasNext()) {
            int value = iteB.next();
            dif = (int) Math.abs(value - value2);
            if (dif <= k) {
                System.out.println("we took " + value + " from boys with " + value2
                        + " from girls, thier dif is " + dif);
                count++;
                iteB.remove();
                iteG.remove();

            }
        }
    }
    System.out.println((int) count);

這段代碼給了我錯誤的信息,也給了我同樣的異常。

這是我第一次使用ArrayList,您是否有任何糾正此代碼的想法?

您每次都必須為女孩重新分配迭代器。

 int k = 5;
    int count = 0;
    ArrayList<Integer> ArrGirls = new ArrayList<>((List<Integer>) Arrays.asList(new Integer[]{34, 37, 28, 16, 44, 36, 37, 43, 50, 22}));
    ArrayList<Integer> ArrBoys = new ArrayList<>((List<Integer>) Arrays.asList(new Integer[]{13, 28, 41, 10, 14, 27, 41, 27, 23, 37}));
    for (Iterator<Integer> iteG = ArrGirls.iterator(); iteG.hasNext();) {
        {
            Integer ArrGirl = iteG.next();
            for (Iterator<Integer> iteB = ArrBoys.iterator(); iteB.hasNext();) {
                Integer ArrBoy = iteB.next();
                int dif = (int) Math.abs(ArrBoy - ArrGirl);
                if (dif <= k) {
                    System.out.println("we took " + ArrBoy + " from boys with "
                            + ArrGirl + " from girls, thier dif is " + dif);
                    ArrBoys.remove(ArrBoy);
                    ArrGirls.remove(ArrGirl);
                    iteG = ArrGirls.iterator();//You have to reset the value of iterationGirls
                    count++;
                    break;
                }
            }
        }
    }
    System.out.println(count);
// This helps I guess with little modifications for taking the inputs
public class Boy {

    private int height;

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

}

public class Girl {

    private int height;

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

}

import java.util.ArrayList;
import java.util.List;
import java.util.Random;


public class Program {

    public static void main(String[] args) {
        int k=11;
        Random random = new Random();
        List<Boy> boys = new ArrayList<Boy>();
        List<Girl> girls = new ArrayList<Girl>();
        int noOfcombinations = 0;
        for(int i=1;i<=100;i++)
        {
            Boy boy = new Boy();
            boy.setHeight(random.nextInt(109));
            Girl girl = new Girl();
            girl.setHeight(random.nextInt(109));
            boys.add(boy);
            girls.add(girl);
        }
        for (Boy boy : boys) {
            for (Girl girl : girls) {
                if(Math.abs(boy.getHeight()-girl.getHeight())<k)
                {
                    noOfcombinations++;
                }

            }
        }
        System.out.println("No of combinations is "+noOfcombinations);

    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM