2014-09-28 79 views
0

我試圖創建一個程序,該程序給出由用戶輸入創建的兩個數組的聯合,相交和差異。因此,如果用戶想要第一個數組的大小爲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] + " ");   
      } 
     } 
    } 
    } 
+0

爲什麼不使用HashSet?然後所有這些操作都只是一個方法調用。 – 2014-09-28 01:29:44

+0

問題是,比如'setA [0] == setB [1]','setA [0] == setB [0]'可能是錯誤的,這意味着它將被打印。您必須檢查每個元素,只有在沒有碰撞的情況下才能打印它。 – Obicere 2014-09-28 01:29:57

+1

作業的這種氣味 – Jack 2014-09-28 03:05:54

回答

1

你意想不到的結果

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取一個元素setAset 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); 
+0

感謝您的協助。我懷疑對於工會我需要創建第三個數組。 – Hermes 2014-09-28 02:29:58

+0

你想獲得不同的元素到一個數組嗎? – 2014-09-28 02:32:14

+0

這個想法是打印出第一個數組和第二個數組中的所有元素,而不打印任何重複項。會沿着int [] setC = new int [setA.length + setB.length]讓我接近還是離開基地?再次感謝您的幫助。 – Hermes 2014-09-28 02:39:35