2017-08-01 81 views
0

我正在写一个函数,它返回两个整型数组之间的差异。我假设输入数组中的所有元素都是唯一的,而且输入数组也没有排序。例如:找到两个整数数组之间的差异

输入:
arr1 = [1,2,3,5,4]
arr2 = [1,2,3]

预期输出:[4,5]

我的输出:[1,2,3,4,5](当第一阵列比第二大)

当我使第二阵列大于第一,我得到ArrayIndexOutOfBoundsException

public class Test{ 

    public static void main(String args[]) 
    { 

     Scanner sc = new Scanner(System.in); 
     System.out.println("Enter length of first array"); 
     int ml = sc.nextInt(); 
     System.out.println("Enter length of second array"); 
     int nl = sc.nextInt(); 
     int m[] = new int[ml]; 
     int n[] = new int[nl]; 
     System.out.println("Enter elements of first array"); 
     for(int i=0;i<ml;i++) 
     { 
      m[i] = sc.nextInt(); 
     } 

     System.out.println("Enter elements of second array"); 
     for(int j=0;j<nl;j++) 
     { 
      m[j] = sc.nextInt(); 
     } 
     ArrayList<Integer> arr1 = new ArrayList<Integer>(); 
     for(int i: m){ arr1.add(i);} 
     ArrayList<Integer> arr2 = new ArrayList<Integer>(); 
     for(int j: n){ arr2.add(j);} 
     if(ml>nl) 
     { 
      arr1.removeAll(arr2); 
      System.out.println(arr1); 
     } 
     else 
     { 
      arr2.removeAll(arr1); 
      System.out.println(arr2); 
     } 
    } 
} 
+1

我强烈建议你通过这个步骤与调试器。你将能够看到到底发生了什么。 –

+1

使用try catch块进行适当的异常处理。 – Tehmina

回答

2

在第二次迭代,你应该使用的n[j] = ...代替m[j] = ... 您应该使用更具描述性的变量名,以防止事情样的事情的发生。

+0

谢谢,这解决了它。我会记住将来会保留更好的名字。 – coder8888

-3

那么这在我脑海的第一个想法是这样的:

if(array1.Length>array2.Length){ 
foreach(int k in array1){ 
foreach(int l in array2){ 
if(k==l){ 
k=null; 
} 
} 
} 
}else{ 
foreach(int l in array2){ 
foreach(int k in array1){ 
if(l==k){ 
l=null; 
} 
} 
} 
} 


未经检验的,只有在定理适用于当一个阵列是另一个的子集,但希望它的一个开始: )

+0

这不是Java。如果它是Java,它将无法工作,因为int []不能存储空值。 –

0

如果它不是让你在阵列/反复练习的功课,你可以考虑使用Set为更简单的逻辑:

// pseudo-code 
Set<Integer> set1 = new HashSet<>(array1); 
Set<Integer> set2 = new HashSet<>(array2); 

// Using Guava 
Set<Integer> diff = Sets.symmetricDifference(set1, set2); 

// Java only 
Set<Integer> diff1 = new HashSet<>(set1); 
diff1.removeAll(set2); // diff1 contains entries in array1 but not 2 
Set<Integer> diff2 = new HashSet<>(set2); 
diff2.removeAll(set1); // diff2 contains entries in array2 but not 1 

Set<Integer> diff = new HashSet<>(set1); 
diff.addAll(set2); 


// Java only, using stream 
return Stream.concat(set1.stream(), set2.stream()) 
      .filter(i -> ! (set1.contains(i) && set2.contains(i))) 
      .collect(Collectors.toSet()); 
0

您可以检查元素第二个存在如果不能够增加输出数组如下:

int[] array1 = new int[] { 1, 2, 3, 4, 5 }; 
    int[] array2 = new int[] { 1, 2, 3 }; 
    List<Integer> output = new ArrayList<>(); 
    for (int i = 0; i < array1.length; i++) { 
     boolean flag = false; 
     for (int j = 0; j < array2.length; j++) { 
      if (array1[i] == array2[j]) { 
       flag = true; 
       break; 
      } 
     } 
     if (!flag) { 
      output.add(array1[i]); 
     } 
    } 

    System.out.println(output); 
相关问题