2012-04-29 37 views
-3

我是Java新手,我被要求做交集和聯合。我有這個代碼,我不知道問題是什麼。我的代碼在沒有Scanner輸入的情況下工作= new Scanner(System.in);Java中的交集和聯盟錯誤

import java.util.*;  
import java.util.ArrayList; 

public class Arrays{ 
    Scanner input=new Scanner(System.in); 

    private static int[] array_one = new int[5]; 
    for(i=0;i<5;i++){ 
     array_one[i]=input.nextInt(); 
    } 
    private static int[] array_two = new int[5]; 
    for(i=0;i<5;i++){ 
     array_two[i]=input.nextInt(); 
    } 

    public static void main(String main[]){ 
     System.out.println("First Array"); 
     System.out.println(Arrays.toString(array_one)); 
     System.out.println("Second Array"); 
     System.out.println(Arrays.toString(array_two)); 

     int[] union = getUnion(array_one, array_two); 

     System.out.println("--- Union of sets ---"); 

     for(int i=0; i<union.length; i++){  
      System.out.print(union[i] + " "); 
     }  
     System.out.println("");  
     Integer[] intersection = getIntersection(array_one, array_two);  
     System.out.println("--- Intersection of sets ---");  
     for(int i=0; i<intersection.length; i++) {  
      System.out.print(intersection[i] + " ");  
     }  
     System.out.println("");  
     System.out.println("\nIs The Two Array Equal?"); 
     boolean check = Arrays.equals(array_one, array_two); 
     if(check == false) 
     System.out.println("= Arrays Are Not Equal"); 
     else 
     System.out.println("= Arrays Are Equal"); 
    }   

    private static int[] getUnion(int[] a_one, int[] a_two){ 

     int i=0, j=0;  
     int value = -1;  
     int MAX_ELEM = 0;  
     int[] a_return = new int[a_one.length + a_two.length -1]; 

     try{  
      while(i<a_one.length || j<a_two.length){  
       if(a_one[i] < a_two[j]){ 
        value = a_one[i];  
        i++;  
       }else{  
        value = a_two[j];  
        j++;  
       }  
       if(!found(a_return, value, 0, MAX_ELEM)){  
        a_return[MAX_ELEM++] = value;  
       }  
      }  
     } catch (IndexOutOfBoundsException ex){  
      if(i == a_one.length){  
       for(int k=j; k<a_two.length; k++){  
        if(!found(a_return, a_two[k], 0, MAX_ELEM)){  
         a_return[MAX_ELEM++] = a_two[k];  
        }  
       }  
      } else {  
       for(int l=i; l<a_one.length; l++){ 

        if(!found(a_return, a_one[l], 0, MAX_ELEM)){  
         a_return[MAX_ELEM++] = a_one[l];  
        }  
       }  
      }  
     }  
     return a_return;  
    } 

    private static Integer[] getIntersection(int[] a_one, int[] a_two){  
     ArrayList<Integer> a_list = new ArrayList<Integer>();  
     int i=0, j=0;  
     while(i < a_one.length && j< a_two.length){  
      if(a_one[i] == a_two[j]){ 
        a_list.add(a_one[i]);  
       i++;  
       j++;  
      }else if(a_one[i] < a_two[j]){  
       i++;  
      }else if(a_one[i] > a_two[j]){  
       j++;  
      }  
     }  
     Integer[] a_return = new Integer[a_list.size()];  
     a_list.toArray(a_return);  
     return a_return;  
    } 

    /* -------- linear search --------- */  
    private static boolean found1(int[] array, int value,int start, int end){  
     for(int i=0; i<array.length; i++){  
      if(array[i] == value){  
       return true;  
      }  
     }  
     return false;  
    } 

    /* ---------- binary search ------------- */ 
    private static boolean found(int[] array, int value, int start, int end){  
     if(end < 0 || start < 0){  
      return false;  
     }  
     if(array[start] == value || array[end] == value){  
      return true; 
     } 
     if(end-start == 1){  
      if(array[end] == value){  
       return true;  
      }  
      if(array[start] == value){  
       return true;  
      }  
     }else{  
      int mid = (start + end)/2;  
      if(array[mid] == value){  
       return true;  
      }else if(array[mid] < value){  
       return found1(array, value, mid+1, end);  
      }else if(array[mid] > value){  
       return found1(array, value, start, mid-1);  
      }  
     }  
     return false;  
    }  
} 
+1

你看到了什麼?你能指望什麼?當它按預期停止工作? – MByD 2012-04-29 01:53:38

+6

您發佈的代碼不會編譯;您不能在方法或初始化程序塊外擁有可執行語句。 – 2012-04-29 02:02:01

回答

0

你應該具有該代碼

private static int[] array_one = new int[5]; 
for(i=0;i<5;i++){ 
    array_one[i]=input.nextInt(); 
} 
private static int[] array_two = new int[5]; 
for(i=0;i<5;i++){ 
    array_two[i]=input.nextInt(); 
} 

private static int[] array_one = new int[5]; 
for(i=0;i<5;i++){ 
    array_one[i]=input.nextInt(); 
} 
private static int[] array_two = new int[5]; 
for(i=0;i<5;i++){ 
    array_two[i]=input.nextInt(); 
} 

內部主()或任何方法或static block

This鏈接可能對您有幫助。

2

如果你可以使用Java Collections,我在我的一個家庭作業中使用它。

public static Set<Integer> union(Set<Integer> a, Set<Integer> b) { 
    Set<Integer> union = new HashSet<>(); 
    union.addAll(a); 
    union.addAll(b); 
    return union; 
} 

祝你好運!