-3

我有以下任务:-20000000 到 20000000 之间有 2 个一维整数数组。第一个数组中包含的一些数字也包含在第二个数组中。我必须找到包含在第一个数组中但不包含在第二个数组中的所有数字。我必须使用 Java 作为一种语言

这是数组

[1, 652,5, 15, 385, 4, 55, 666, 13]

[2、4658、9、55、-588、10、1083、17]

任何想法如何找到它?

编辑:

这是最终代码:

import java.util.ArrayList;
import java.util.List;
public class Values {
public static void main (String[] argv) {

int[] Array1 = new int[] {1,652,5,15,385,4,55,666,13};
int[] Array2 = new int[] {2, 4658, 9, 55, -588, 10, 1083, 17};
int calculateResult = 0;
boolean contains = false;
int mod = 123456789; 
int modSum = 0;

List<Integer> results = new ArrayList<Integer>();
    for(int i=0; i<Array1.length; i++) {
        for(int j=0; j<Array2.length; j++) {
            if(Array1[i]==Array2[j]) {
                contains = true;
                break;
            }
        }
        if(!contains) {
            results.add(Array1[i]);
        }
        else {
            contains = false;
        }
    }
    // calculate the result
    for (int i : results) {
        calculateResult  += i;
    }
    // Print Results
    System.out.println(results);
    System.out.println(calculateResult);
}}

现在我正在尝试从 .csv 文件加载数组。有任何想法吗 ?

4

5 回答 5

1

这是一个可能的解决方案:

    int[] Array1 = new int[] {1,652,5,15,385,4,55,666,13};
    int[] Array2 = new int[] {2,4658,9,55,-588,10,1083,17};
    boolean contains = false;
    List<Integer> results = new ArrayList<Integer>();


    for(int i=0; i<Array1.length; i++) {
        for(int j=0; j<Array2.length; j++) {
            if(Array1[i]==Array2[j]) {
                contains = true;
                break;
            }
        }
        if(!contains) {
            results.add(Array1[i]);
        }
        else{
            contains = false;
        }
    }

    System.out.println(results);

输出:

[1, 652, 5, 15, 385, 4, 666, 13]

我希望这就是你要找的。

于 2013-10-16T11:13:20.813 回答
0

看看这个:http://docs.oracle.com/javase/6/docs/api/java/util/Set.html#removeAll(java.util.Collection)
所以,答案 = (A - B) + (B - 一个)

于 2013-10-16T11:00:24.447 回答
0

取第一个数组,并且对于其中的每个元素,如果这不是第二个数组的元素,则将其视为好,否则将其丢弃。

现在你只需学习如何用java语言编写它!

于 2013-10-16T11:10:04.690 回答
0

我不明白为什么这个问题有反对票,它实际上很有趣。

看看下面哪个可能对你有用,你只需要使用列表而不是数组

        List<Integer> l1 = new ArrayList<Integer>();
        List<Integer> l2 = new ArrayList<Integer>();

        l1.add(1);
        l1.add(3);
        l1.add(5);
        l1.add(7);
        l1.add(8);

        l2.add(2);
        l2.add(3);
        l2.add(4);
        l2.add(7);

        l2.retainAll(l1);  //Now l2 have only common elements of both list this is an optional this will work well when there are thousands of element otherwise only do remove all
        l1.removeAll(l2);  //Here magic happens this will remove common element from l1 so l1 will have only elements what are not in l2

        for(Integer v: l1){
            System.out.println(v);
        }

输出:

1
5
8
于 2013-10-16T11:09:55.027 回答
0

你可以这样实现。

Integer[] array1  = {1, 652 ,5, 15, 385, 4 , 55, 666, 13};
Integer[] array2 ={2, 4658, 9, 55, -588, 10, 1083, 17};
List<Integer> list=  new ArrayList<Integer>(Arrays.asList(array1));
TreeSet<Integer> set = new TreeSet<Integer>(list);
set.removeAll(Arrays.asList(array2));

System.out.println(set);
于 2013-10-16T11:47:18.463 回答