黑马程序员技术交流社区
标题:
练习十九:找出两数组间的不同元素
[打印本页]
作者:
maxwell247
时间:
2015-9-26 23:35
标题:
练习十九:找出两数组间的不同元素
从网上找到一份编程练习题,我决定将里面的题目全都做一遍。
/*
题目: 有两个数组int[] a = {1,5,4,6};int[] b = {1,5,4,6,8,7,2},编写一个程序找出数组a,b中不同的元素
*/
/*
分析;这个题目想了好几种思路。
思路一:遍历a,b两数组中的所有元素,将a,b中相同的元素赋值为某固定值(0,-1等特殊含义的值)。
--> 但是int[]数组限制了数组中元素的范围,一旦数组中中出现该值,将出现问题。(行不通!)
思路二:遍历a,b两数组中的所有元素,将a,b中相同的元素赋值为a中第一次比较相等的值。
--> 这样能保证不会出现新值的问题。但是,一旦a,b数组中没有相同值,那么程序将失效。(行不通!)
思路三:定义两个临时的数组c,d分别记录a,b两个数组的角标。当a,b中有相同元素,将c,d中对应元素赋值为-1。遍历c,d输出a,b的不同元素。
--> 目前该思路还算通用。但是效率比较低。
-----------------------------------------------------------------------------------------------------------------------------
以上,三种思路都没有考虑到一个问题。就是 a中 或 b中自身有重复元素的情况。这是这个程序的不足之处!
思路四:使用HashSet实现。将a,b中的数全部加到HashSet中。这样就能保证不出现重复元素。
下面的代码是对思路三的实现。
*/
class ShuZuBuTongYuanSu {
public static void main(String[] args) {
int[] a={1,5,4,6};
int[] b={1,5,4,6,8,7,2};
//定义记录角标
int[] c=new int[a.length];
int[] d=new int[b.length];
//对a[] 和 b[]遍历
for (int i=0; i<a.length; i++){
for (int j=0; j<b.length; j++){
if (a
==b[j]){ //如果a[] 和 b[]中元素相同
c
=-1; //在c[]中将a[]出现相同元素的角标赋值为-1
d[j]=-1; //在d[]中将b[]出现相同元素的角标赋值为-1
}
}
}
//遍历c[]数组中a[]的不同元素
for (int i=0; i<c.length; i++){
if (c
!=-1){
System.out.print(a
);
}
}
//遍历d[]数组中b[]的不同元素
for (int j=0; j<d.length; j++){
if (d[j]!=-1){
System.out.println(b[j]);
}
}
}
}
作者:
wx_HWRW5aF7
时间:
2015-9-27 01:23
将第二个数组转化为集合 调用contains方法
作者:
朦胧色彩
时间:
2015-9-27 11:49
class Test
{
public static void main(String[] args)
{
int[] a = {1,5,4,6,9};
int[] b = {1,5,4,6,8,7,2};
/*
* getDifferents(a, b),枚举a数组元素在b数组中找,看看a数组的这个元素b中有没有
* getDifferents(b, a),枚举b数组元素在a数组中找,看看b数组的这个元素a中有没有
* 上面两个返回值用连接符 连接 就是最终答案
* 输出的时候,diff.substring(0, diff.length() - 1) 是为了去掉字符串最后的逗号
*/
String diff = getDifferents(a, b)+getDifferents(b, a);
System.out.println(diff.substring(0, diff.length() - 1));
}
public static String getDifferents(int[] a, int[] b)
{
String differents = "";// 记录不同的元素
for(int n = 0 ;n < a.length ; n++)
{
int m;
for(m = 0; m < b.length ; m++)
{
//如果相等就跳出,下一个元素
if(a[n] == b[m])
{
break;
}
}
//如果角标等于少元素的数组长度,说明这个数组里没有这个元素
if(m == b.length)
differents += a[n] + ",";
}
return differents;
}
}
复制代码
希望可以帮到您!如果有不对的地方,希望大神们指出!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2