我有以下任务: 在-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文件加载数组。有什么想法吗?
答案 0 :(得分: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]
我希望这就是你要找的东西。
答案 1 :(得分:0)
检查一下:http://docs.oracle.com/javase/6/docs/api/java/util/Set.html#removeAll(java.util.Collection)
所以,回答=(A - B)+(B - A)
答案 2 :(得分: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
答案 3 :(得分:0)
取第一个数组,并且,对于它的每个元素,如果这不是第二个数组的元素,那么把它当作好,否则丢弃它。
现在你只需研究如何用java语言编写它!
答案 4 :(得分: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);