Java mooc智能计数器

Java mooc智能计数器,java,arraylist,Java,Arraylist,我已经试着解决这个练习好几天了,但是做不到。在本练习中,两个ArrayLists有一个整数列表。必须删除每个列表中包含的整数,并且不相同的数字应显示在一个ArrayList(假设arrayList1与arrayList2合并)。我只想使用foreach循环。主要内容不作任何更改。仅在方法中请求更改 public class SmartCombining { public static void smartCombine(ArrayList<Integer> list1, Ar

我已经试着解决这个练习好几天了,但是做不到。在本练习中,两个
ArrayLists
有一个整数列表。必须删除每个列表中包含的整数,并且不相同的数字应显示在一个
ArrayList
(假设
arrayList1
arrayList2
合并)。我只想使用
foreach
循环。主要内容不作任何更改。仅在方法中请求更改

public class SmartCombining {
    public static void smartCombine(ArrayList<Integer> list1, ArrayList<Integer> list2) {
        int index = 0;
        int index2 = 0;
        for (int number : list1) {
            for (int num2 : list2) {
                if (list2.contains(number) == list1.contains(num2)) {
                    list2.remove(index2);
                    list1.remove(index);                    
                }
                index2++;
            }
            index++;
        }
        list1.addAll(list2);
    }

    public static void main(String[] args) {
        ArrayList<Integer> list1 = new ArrayList<Integer>();
        ArrayList<Integer> list2 = new ArrayList<Integer>();

        Collections.addAll(list1, 4, 3);
        Collections.addAll(list2, 5, 10, 4, 3, 7);

        // Remove comment when method ready
        // smartCombine(list1, list2);
        System.out.println(list1);
        System.out.println(list2);
    }
}
公共类智能组合{
公共静态void smartCombine(ArrayList列表1、ArrayList列表2){
int指数=0;
int index2=0;
for(整数编号:list1){
对于(整数m2:list2){
if(list2.contains(number)=list1.contains(num2)){
清单2.移除(index2);
列表1.删除(索引);
}
index2++;
}
索引++;
}
列表1.addAll(列表2);
}
公共静态void main(字符串[]args){
ArrayList list1=新的ArrayList();
ArrayList list2=新的ArrayList();
集合.addAll(列表1、4、3);
集合.addAll(列表2,5,10,4,3,7);
//方法就绪时删除注释
//智能联合收割机(列表1、列表2);
System.out.println(列表1);
System.out.println(列表2);
}
}

您可以将
list1
保持不变,只需通过删除
list1
中常见的元素并添加
list1
中但不在
list2
中的元素来修改
list2
。在退出
smartCombine
方法之前,您可以将
list2
添加到
list1
以获得列表之间的并集,并且
list2
将包含对称差异,即不在两个列表中的元素

public static void smartCombine(ArrayList<Integer> list1, ArrayList<Integer> list2) {
    for(Integer i : list1) {
        if(list2.contains(i)) {
            list2.remove(i);
        } else {
            list2.add(i);
        }
    }
    // if you don't need the union, don't add the line below and
    // list1 will contain [4, 3] otherwise it will contain [4, 3, 5, 10, 7]
    list1.addAll(list2);
}

public static void main(String[] args) {
    ArrayList<Integer> list1 = new ArrayList<Integer>();
    ArrayList<Integer> list2 = new ArrayList<Integer>();

    Collections.addAll(list1, 4, 3);
    Collections.addAll(list2, 5, 10, 4, 3, 7);

    // Remove comment when method ready
    smartCombine(list1, list2);
    System.out.println(list1);
    System.out.println(list2);

    // list1 will the contain the union of both lists [4, 3, 5, 10, 7]
    // list2 will have symmetric difference [5, 10, 7]
}
publicstaticvoidsmartcombine(arraylistlist1,arraylistlist2){
for(整数i:list1){
如果(列表2.包含(i)){
清单2.删除(i);
}否则{
清单2.添加(i);
}
}
//如果你不需要工会,不要在下面加上一行
//列表1将包含[4,3],否则它将包含[4,3,5,10,7]
列表1.addAll(列表2);
}
公共静态void main(字符串[]args){
ArrayList list1=新的ArrayList();
ArrayList list2=新的ArrayList();
集合.addAll(列表1、4、3);
集合.addAll(列表2,5,10,4,3,7);
//方法就绪时删除注释
智能联合收割机(列表1、列表2);
System.out.println(列表1);
System.out.println(列表2);
//列表1将包含两个列表的并集[4,3,5,10,7]
//列表2将具有对称差异[5,10,7]
}
公共类智能组合{
公共静态void smartCombine(ArrayList列表1、ArrayList列表2){
int i=0;
for(整数:列表1){
while(list2.contains(number)){
清单2.删除(编号);
} 
}
列表1.addAll(列表2);
}
公共静态void main(字符串[]args){
ArrayList list1=新的ArrayList();
ArrayList list2=新的ArrayList();
集合.addAll(列表1、4、3);
集合.addAll(列表2,5,10,4,3,7);
//方法就绪时删除注释
//智能联合收割机(列表1、列表2);
System.out.println(列表1);
System.out.println(列表2);
}
}

请提供问题说明、示例输入、预期输出和您的代码。这并不能解决问题,因为列表2中的数字没有删除。其次,必须从两个列表中删除常用数字,而不仅仅是列表2。您的预期输出是什么?这意味着,只有当列表中不包含该数字时,该方法才会向列表中添加新数字。您可能会发现ArrayList类中包含的方法很有用。您可以使用该方法检查列表中是否有数字。现在我在你的代码后面得到的唯一错误是:列表[5,1,2]和[5,1,2,1,40]的组合是数字1的两倍。顺便说一下,我还从你的代码中删除了else语句。。。如果我没有删除它,我将得到两个错误。我得到的另一个错误是:列表[10,11]和[5]的组合的数字是0的两倍。我清除了它,只有一个单词发挥了神奇的作用。将if替换为while:D
public class SmartCombining {

    public static void smartCombine(ArrayList<Integer> list1, ArrayList<Integer> list2) {
        int i = 0;
        for (Integer number : list1) {
            while (list2.contains(number)) {
                    list2.remove(number);                
            } 
        }

        list1.addAll(list2);
    }
    public static void main(String[] args) {
        ArrayList<Integer> list1 = new ArrayList<Integer>();
        ArrayList<Integer> list2 = new ArrayList<Integer>();

        Collections.addAll(list1, 4, 3);
        Collections.addAll(list2, 5, 10, 4, 3, 7);

        // Remove comment when method ready
        // smartCombine(list1, list2);
        System.out.println(list1);
        System.out.println(list2);
    }
}