gpt4 book ai didi

java - 查找两个一维数组的并集、交集和差集

转载 作者:行者123 更新时间:2023-12-01 12:29:15 25 4
gpt4 key购买 nike

我正在尝试创建一个程序,给出由用户输入创建的两个数组的并集、交集和差值。因此,如果用户希望第一个数组的大小为 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

你的逻辑有一些问题。你通过从setA中取出一个元素来检查setAset B之间的差异,并检查它是否与setB的元素不同,但问题是。例如,您从 setA 中取出 1 并检查它是否与 3 ,4, 5, 6 ,7 不同。因此它与所有 5 个元素不同,因此 1 将打印 5 times.最糟糕的问题发生在当你从 setA 中取出 3 并检查 setB 时。3 与 setB 中期望第一个元素不同的所有元素都不同。所以 3 将打印 4 次但是等等,这给出了这样的想法:如果 setA 的一个元素打印少于 5 次,这意味着它不是不同的元素。你要做的就是检查所有 5 个元素是否不同,而不是单个,我放入 count 变量并检查它是否与 setB 不同 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]

查找联合值。您可以使用 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);

关于java - 查找两个一维数组的并集、交集和差集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26080769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com