-4

I'm new in Java and I'm asked to do intersection and union. I have this code and I don't know what the problem is.

my code works without Scanner input = 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;    
    }    
}
Andrew Barber
  • 39,603
  • 20
  • 94
  • 123
Jon Vidal
  • 1
  • 3

2 Answers2

2

If you can use Java Collections, I was use it this in one of my homeworks.

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

Good luck!

Paul Vargas
  • 41,222
  • 15
  • 102
  • 148
0

You should be having this code

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();
}

inside main() or any method or static block.

This link might be helpful.

Community
  • 1
  • 1
Anuj Balan
  • 7,629
  • 23
  • 58
  • 92