两个集合的并集,操作数组Java

两个集合的并集,操作数组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(

其思想是计算两个集合集的并集,在程序开始时,将要求用户输入所需集合的长度,然后提示用户在集合中分配元素,最后的思想是计算并集。 我已经到了最后,在编译完我的程序后,只打印第一组的元素,我真的不知道为什么

所以我的问题是,按照我开始的想法,如何计算集合并集。

我的输出:

所需阵列长度: 3. 3. 第一组元素: 1. 2. 3. 第二组元素: 4. 5. 6. 集合的并集: 1.002.003

公共类联合{
公共静态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();
}