2012-04-29 2 views
-3

저는 Java에서 새로 왔으며 교차 및 합집합을 수행하도록 요청 받았습니다. 이 코드가 있는데 문제가 무엇인지 알지 못합니다.Java 오류의 교차 및 합집합

내 코드는 스캐너 입력없이 작동합니다. = new Scanner (System.in);

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

+6

게시 된 코드는 컴파일되지 않습니다. 메서드 나 이니셜 라이저 블록 외부에서 실행 문을 사용할 수 없습니다. –

답변

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을 사용할 수있는 경우, 숙제 중 하나에서 사용했습니다.

행운을 빈다!