Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java的2 for循环中从2 ArrayList中删除元素_Java_Arrays_Algorithm_Arraylist_Iterator - Fatal编程技术网

在java的2 for循环中从2 ArrayList中删除元素

在java的2 for循环中从2 ArrayList中删除元素,java,arrays,algorithm,arraylist,iterator,Java,Arrays,Algorithm,Arraylist,Iterator,有N个男孩和N个女孩。只有男孩和女孩可以组成一对舞伴(即不允许同性舞伴)。成双的唯一其他条件是,它们的绝对高度差应小于或等于K 找出可以形成的最大对数,以便每个人都有一个唯一的伙伴 输入格式 第一行将包含两个整数,N和K。 第二行将包含N个整数,即N个男孩的高度。 第三行将包含N个整数,即N个女孩的高度 约束条件 1.≤N≤105 1.≤K≤109 1.≤男孩或女孩的身高≤109 输出格式 包含最大可能对数的单行 我的问题是在满足条件后从两个数组中删除元素。(存储2个阵列后) 我使用的第一个算法

有N个男孩和N个女孩。只有男孩和女孩可以组成一对舞伴(即不允许同性舞伴)。成双的唯一其他条件是,它们的绝对高度差应小于或等于K

找出可以形成的最大对数,以便每个人都有一个唯一的伙伴

输入格式 第一行将包含两个整数,N和K。 第二行将包含N个整数,即N个男孩的高度。 第三行将包含N个整数,即N个女孩的高度

约束条件 1.≤N≤105 1.≤K≤109 1.≤男孩或女孩的身高≤109

输出格式 包含最大可能对数的单行

我的问题是在满足条件后从两个数组中删除元素。(存储2个阵列后)

我使用的第一个算法是:

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);
这段代码给了我错误的信息,也给了我同样的例外

这是我第一次使用ArrayList,您有什么想法来更正此代码吗?

//这有助于我猜测,只需对输入进行一些修改
// 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);

    }

}
公班男生{ 私人内部高度; 公共整数getHeight(){ 返回高度; } 公共空间设置高度(内部高度){ 高度=高度; } } 公班女生{ 私人内部高度; 公共整数getHeight(){ 返回高度; } 公共空间设置高度(内部高度){ 高度=高度; } } 导入java.util.ArrayList; 导入java.util.List; 导入java.util.Random; 公共课程{ 公共静态void main(字符串[]args){ int k=11; 随机=新随机(); List boys=new ArrayList(); List girls=new ArrayList(); int noOfcombinations=0; for(inti=1;i
//这有助于我进行猜测,只需对获取输入进行少量修改
公班男生{
私人内部高度;
公共整数getHeight(){
返回高度;
}
公共空间设置高度(内部高度){
高度=高度;
}
}
公班女生{
私人内部高度;
公共整数getHeight(){
返回高度;
}
公共空间设置高度(内部高度){
高度=高度;
}
}
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Random;
公共课程{
公共静态void main(字符串[]args){
int k=11;
随机=新随机();
List boys=new ArrayList();
List girls=new ArrayList();
int noOfcombinations=0;

对于(inti=1;i,每次都必须为女孩重新分配迭代器。这很好

 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);
intk=5;
整数计数=0;
ArrayList ArrGirls=新的ArrayList((List)Arrays.asList(新的整数[]{34,37,28,16,44,36,37,43,50,22}));
ArrayList ArrBoys=新的ArrayList((List)Arrays.asList(新的整数[]{13,28,41,10,14,27,41,27,23,37}));
for(迭代器iteG=arrgies.Iterator();iteG.hasNext();){
{
整数ArrGirl=iteG.next();
for(迭代器iteB=ArrBoys.Iterator();iteB.hasNext();){
整数ArrBoy=iteB.next();
int-dif=(int)Math.abs(ArrBoy-arrgail);

如果(dif你每次都必须为女孩重新分配迭代器,这很好

 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);
intk=5;
整数计数=0;
ArrayList ArrGirls=新的ArrayList((List)Arrays.asList(新的整数[]{34,37,28,16,44,36,37,43,50,22}));
ArrayList ArrBoys=新的ArrayList((List)Arrays.asList(新的整数[]{13,28,41,10,14,27,41,27,23,37}));
for(迭代器iteG=arrgies.Iterator();iteG.hasNext();){
{
整数ArrGirl=iteG.next();
for(迭代器iteB=ArrBoys.Iterator();iteB.hasNext();){
整数ArrBoy=iteB.next();
int-dif=(int)Math.abs(ArrBoy-arrgail);

如果(dif)可以使用解决,例如。您需要在删除后中断(或向上更改逻辑),则不能在调用next()之前调用remove。例如,可以使用解决。如果需要在删除后中断(或向上更改逻辑),则不能在调用next()之前调用remove不要为OP提出的问题提供不同的解决方案。为给定的问题提供解决方案谢谢你的帮助,让我知道代码中的错误。不要为OP提出的问题提供不同的解决方案。为给定的问题提供解决方案谢谢你的帮助,让我知道代码中的错误。我使用了你的代码,但仍然给了我wrong信息和相同的异常:(我使用了您的代码,但仍然提供了错误的信息和相同的异常:(
 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);