查找两个单维数组的联合,相交和差异
问题描述:
我试图创建一个程序,该程序给出由用户输入创建的两个数组的联合,相交和差异。因此,如果用户想要第一个数组的大小为4,元素[1 2 3 4]和第二个数组的大小为5并且元素[3 4 5 6 7],则输出应该返回; A组与B组的联合为:1 2 3 4 5 6 7 A组与B组的交集为:3 4 A组与B组的差值为:1 2 此时获得交集但是,差异不起作用。差异被打印出来作为第一个数组的所有元素。我不知道该从哪里开始工会。这里是我的代码:查找两个单维数组的联合,相交和差异
package rhc91310a13sets;
import java.util.*;
public class rhc91310a13sets {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] setA = null;
int[] setB = null;
System.out.print("Enter size for set A (must be less than or equal to 20): ");
setA = new int[sc.nextInt()];
System.out.print("Enter elements for set A between 1-20: ");
for (int i = 0; i < setA.length; i++) {
setA[i] = sc.nextInt();
}
System.out.print('\n');
System.out.print("Enter size for set B (must be less than or equal to 20): ");
setB = new int[sc.nextInt()];
System.out.print("Enter elements for set B between 1-20: ");
for (int i = 0; i < setB.length; i++) {
setB[i] = sc.nextInt();
}
System.out.print('\n');
System.out.print("The union of sets A and B are: ");
for(int i = 0; i < setA.length; i++) {
for(int j = 0; j < setB.length; j++) {
}
}
System.out.print('\n');
System.out.print("The intersection of sets A and B are: ");
for (int i = 0; i < setA.length; i++) {
for (int j = 0; j < setB.length; j++) {
if (setA[i] == setB[j]) {
System.out.print(setA[i] + " ");
}
}
}
System.out.print('\n');
System.out.print("The difference of sets A and B are: ");
for (int i = 0; i < setA.length; i++) {
for (int j = 0; j < setB.length; j++) {
if (!(setA[i] == setB[j]))
System.out.print(setA[i] + " ");
}
}
}
}
答
你意想不到的结果
The difference of sets A and B are: 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4
你的逻辑已经由组A取一个元素setA
和set B
之间的一些problems.you检查差异,检查是从组B的元素不同,但是这个问题,例如你从setA中取出1
,并且检查它是否与3 ,4, 5, 6 ,7
不同,所以它不同于所有5个元素,所以1会打印5次。当你从setA取3并检查setB时,最糟糕的问题发生了。 3不同于setB.so 01中的所有元素将打印4 times
。但等待这个想法。如果setA print less than 5 times
的元素意味着它不是不同的元素。你所要做的是检查它有什么不同所有5个元素不是单一的,我把计数变量,并检查它与setB.but不同的5倍,我认为简单的方法是使用HashSet
int[] setA = {1,2,3,4};
int[] setB = {3 ,4, 5, 6 ,7};
int count=0;
System.out.print("The difference of sets A and B are: \n");
for (int i = 0; i < setA.length; i++) {
count=0;
for (int j = 0; j < setB.length ; j++) {
if ((setA[i] != setB[j])){
count++;
}
if(count==setB.length){
System.out.println(setA[i]);
}
}
}
输出>>
The difference of sets A and B are:
1
2
*** ***更新
,如果你想提出的这2种不同的元素阵列最好方式是ArrayList的。你可以这样做以下
int[] setA = {1, 2, 3, 4};
int[] setB = {3, 4, 5, 6, 7};
int count = 0;
ArrayList<Integer> arl = new ArrayList<Integer>();
System.out.print("The difference of sets A and B are: \n");
for (int i = 0; i < setA.length; i++) {
count = 0;
for (int j = 0; j < setB.length; j++) {
if ((setA[i] != setB[j])) {
count++;
}
if (count == setB.length) {
// System.out.println(setA[i]);
arl.add(i);
}
}
}
System.out.println(arl);
输出>>
The difference of sets A and B are:
1
2
[0, 1]
发现工会values.you可以使用HashSet的。
ArrayList list = new ArrayList();
for(int i=0;i<setA.length;i++){
list.add(setA[i]);
}
for(int i=0;i<setB.length;i++){
list.add(setB[i]);
}
HashSet h = new HashSet();
h.addAll(list);
list.clear();
list .addAll(h);
System.out.println(list);
为什么不使用HashSet?然后所有这些操作都只是一个方法调用。 – 2014-09-28 01:29:44
问题是,比如'setA [0] == setB [1]','setA [0] == setB [0]'可能是错误的,这意味着它将被打印。您必须检查每个元素,只有在没有碰撞的情况下才能打印它。 – Obicere 2014-09-28 01:29:57
作业的这种气味 – Jack 2014-09-28 03:05:54