两个集合的并集,操作数组Java
其思想是计算两个集合集的并集,在程序开始时,将要求用户输入所需集合的长度,然后提示用户在集合中分配元素,最后的思想是计算并集。 我已经到了最后,在编译完我的程序后,只打印第一组的元素,我真的不知道为什么 所以我的问题是,按照我开始的想法,如何计算集合并集。 我的输出: 所需阵列长度: 3. 3. 第一组元素: 1. 2. 3. 第二组元素: 4. 5. 6. 集合的并集: 1.002.003两个集合的并集,操作数组Java,java,arrays,set-union,Java,Arrays,Set Union,其思想是计算两个集合集的并集,在程序开始时,将要求用户输入所需集合的长度,然后提示用户在集合中分配元素,最后的思想是计算并集。 我已经到了最后,在编译完我的程序后,只打印第一组的元素,我真的不知道为什么 所以我的问题是,按照我开始的想法,如何计算集合并集。 我的输出: 所需阵列长度: 3. 3. 第一组元素: 1. 2. 3. 第二组元素: 4. 5. 6. 集合的并集: 1.002.003 公共类联合{ 公共静态void main(字符串[]args){ System.out.println(
公共类联合{
公共静态void main(字符串[]args){
System.out.println(“所需数组长度:”);
扫描仪扫描=新扫描仪(System.in);
//无限循环用于读取输入,如果输入负数,则断开循环!
while(true){
int n1=scan.nextInt();
int n2=scan.nextInt();
如果(n1<0 | | n2<0)
打破
//将元素指定给第一个集合。
double[]s1=新的double[n1];
System.out.println(“第一组元素:”);
//只要添加的元素数小于指定的数组长度,我们就可以输入元素。
对于(inti=0;i
错误在于代码中,您正在检查集合
s2的哪些元素,您需要放入集合
s3
基本上,您需要检查set
s2
的元素是否存在于set
s1
中
因此,请更改以下代码:
for (int j = 0; j < n2; j++) {
int i = 0;
while (i < n1 && s2[j] == s1[i])
i++;
if (i == n1)
s3[n3++] = s2[j];
}
for(int j=0;j
根据本守则:
for (int j = 0; j < n2; j++) {
int i = 0;
while (i < n1 && s2[j] != s1[i])
i++;
if (i == n1)
s3[n3++] = s2[j];
}
for(int j=0;j
循环while(i
将以i=n1
终止,只有当集合s1
中没有一个元素与元素s2[j]
匹配时,这才是我们想要的两个集合的联合中的元素。您能使用吗?可以很容易地做到这一点
Set<Double> union = new HashSet<>();
for (double e : s1)
union.add(e);
for (double e : s2)
union.add(e);
System.out.println(union);
Set union=newhashset();
用于(双e:s1)
加入(e);
用于(双e:s2)
加入(e);
系统输出打印LN(联合);
如果您不能使用集合框架,必须自己滚动,那么您可能会考虑滚动自己的二进制树或堆。
这是因为以下块:
while (i < n1 && s2[j] == s1[i])
i++;
if (i == n1)
请随时回答任何问题。我不能。我的意思是我可以,但这不是我的想法。在球上!谢谢Sumeet,我忽略了这个条件。
while (i < n1 && s2[j] == s1[i])
i++;
if (i == n1)
Set<Double> elements = new LinkedHashSet<>();
for(double number : s1){
elements.add(number);
}
for(double number : s2){
elements.add(number);
}
double[] union = new double[elements.size()];
int i = 0;
Iterator<Double> iterator = elements.iterator();
while(iterator.hasNext()){
union[i++] = iterator.next();
}