2016-11-23 197 views
-1

我有两个不同大小的数组。 方案1.两个不同大小的数组通过索引来索引匹配比较

A=[1,2,3] 
b=[1,3,2,4] 

场景2.

a=[1,3,2,4] 
b=[1,3,2,] 

如何都通过索引阵列匹配索引,并且如果存在任何差异显示结果。 当两个数组的长度相同时,我能够得到结果。但是当数组大小A比B短或者反之时,那么得到IndexOUTofBoundexception明显的原因是它试图访问不存在的元素。

for (int j=i;j<=i;j ++) 
if (A[i].equals(B[i])) { 
System.out.println(A[i] + "\t " + B[i]); 
} else { 
NumberOfDifference++; 
System.out.println(arrayLines1[i] + "--" + arrayLines2[i]); 
       } 

如果两个数组之间存在差异,只需要显示元素即可。方案2中的 案例Array a具有新元素4,但Array b具有空值。

+2

做什么,如果大小不同?那么匹配标准是什么呢? –

+1

当尺寸不相等时你想要什么?有什么要求?假设缺失元素为零? – developer

+1

你还没有说过你想要的结果是与不存在的元素进行比较。 –

回答

0

显然你只能比较匹配索引直到最短索引。这个问题没有指定你应该用剩余的元素做什么,但是,为了便于讨论,让我们说,我们只是把它们打印:

int sharedLength = Math.min(a.length, b.length); 
for (int i = 0; i < sharedLength; ++i) { 
    if (a[i].equals(b[i])) { 
     System.out.println(a[i] + "\t" + b[i]); 
    } else { 
     System.out.println(a[i] + "--" + b[i]); 
} 

// Here, you could either use an if statement to find the longer array 
// Or, more elegantly(?), just loop over both of them. 
// One of these loops will not execute because the array is too short: 
for (int i = sharedLength; i < a.length; ++i) { 
    System.out.println(a[i] + "--"); 
} 
for (int i = sharedLength; i < b.length; ++i) { 
    System.out.println("\t--" + b[i]); 
} 
0
int m = A.size() 
int n = B.size() 

i =0 
NumberOfDifference = 0 

while (i< m && i<n) 
    if (a[i]==b[i]){   
      System.out.println(A[i] + "\t " + B[i]); 
    }else{ 

     NumberOfDifference++; 
     System.out.println(A[i] + "--" + B[i]); 
     } 
     i++; 
     } 
while (i<m) { 
      NumberOfDifference++; 
      System.out.println(A[i] + "--" + "NO Element");  
      i++ 
} 
while (i<n) { 
      NumberOfDifference++; 
      System.out.println("No Element" + "--" + B[i]);  
      i++; 
} 
+0

此代码不起作用nullPointerexception –

+0

您需要初始化A&B – Kajal

0

这种方式可以让你找出不同元素:

for (int i=0; i < Math.max(A.length, B.length); i++) { 
    if (i >= A.length) { 
    NumberOfDifference++; 
    System.out.println("--" + B[i]); 
    } else if (i >= B.length) { 
    NumberOfDifference++; 
    System.out.println(A[i] + "--"); 
    } else if (A[i].equals(B[i])) { 
    System.out.println(A[i] + "\t " + B[i]); 
    } else { 
    NumberOfDifference++; 
    System.out.println(A[i] + "--" + B[i]); 
    } 
} 

这是最简单的方法:

Arrays.equals(A,B) 
+0

这不是解决方案,因为匹配是索引到索引。如果两个数组索引中的值不匹配,或者一个数组有值而另一个数组有空,则应计算差异。 –

+0

这发生在第3行和第6行。 – mm759

0

你可以只尝试通过阵列我们遍历最短阵列的长度为最大值。

例如:

A=[1,2,3]; 
B=[1,3,2,4]; 
// Assign the shorter length to the temporary Integer minimum length 
int minimum_length = (A.length <= B.length) ? A.length : B.length 
for (int count=0; count < minimum_length; count++) { 
    if (A[count).equals(B[count]) { 
     System.out.println(A[i] + "\t " + B[i]); 
    } else { 
     NumberOfDifference++; 
     System.out.println(A[i] + "--" + B[i]); 
} 
//Now you can just add all other integers as differences to the NumberOfDifferences-Object 
for (int others = A.length; others < B.length; others++) { 
    NumberOfDifferences++; 
    System.out.println("null" + "--" + B[i]); 
} 

这应为一个选项,现在我想你可能只是转身此实现可以添加对A大于B.

长的情况下相同的选项做的工作

希望这是有用的!

0

这个问题不像其他人所说的那么清楚 所以我做出我的假设,你需要通过索引比较来做索引并显示额外的元素。

所以,你可以这样做如下:

  1. 先找阵列使用数组比较小的索引和循环: 比方说,A = [1,2,3] B = [1,3 ,2,4] 所以我们循环A的长度。

    int size = A.length() < B.length() ? A.length() : B.length(); for (int i=0;i < size; i++) { if (A[i].equals(B[i])) { System.out.println(A[i] + "\t " + B[i]); } else { NumberOfDifference++; }

  2. 现在你可以遍历了较大的阵列和表演的区别: 决定以同样的方式来遍历该数组: if(A.length() < B.length()) {
    for(int i=size; i < A.length(); i++) { System.out.println(A[i]); } } else { for(int i=size; i < B.length(); i++) { System.out.println(B[i]); } }

0
  1. 您好,您可以将用户阵列列表,但如果你坚持使用阵列 这里是我的解决方案:

    //你有两个数组: “一[]” 和 “B []”

    if (a.length == b.length){ // the code that you say have have written 
        } 
        else if (a.length > b.length) 
        { 
         int temp[] = new int[a.length]; // initialize a int[] with length of array a[] 
         for (int i = 0 ;b.length>i ; i++){ 
          temp[i] = b[i]; 
         } 
    
         for (int i = b.length; a.length> i ; i++) 
         { 
          temp[i] = -1 ; // some vaue you know wont be in your array 
         } // now you have two array with same length 
         int NumberOfDifference = 0 ; 
         for (int i=0 ; i<a.length;i++){ 
          if (a[i]==(b[i])) { 
           System.out.println("equal occured at index : " + i +" : "+ a[i] + "\t " + b[i]); 
          } 
          else 
          { 
           NumberOfDifference++; 
           System.out.println("equal occured at index : " + i +" : "+ a[i] + "\t " + b[i])); 
          } 
         } 
    
        } // a.length < b.length 
        else { 
    
         int temp[] = new int[b.length]; // initialize a int[] with length of array b[] 
         for (int i = 0 ;a.length>i ; i++){ 
          temp[i] = a[i]; 
         } 
    
         for (int i = a.length; b.length> i ; i++) 
         { 
          temp[i] = -1 ; // some vaue you know wont be in your array 
         } // now you have two array with same length 
         int NumberOfDifference = 0 ; 
         for (int i=0 ; i<b.length;i++){ 
          if (b[i]==(a[i])) { 
           System.out.println("equal occured at index : " + i +" : "+ a[i] + "\t " + b[i]); 
          } 
          else 
          { 
           NumberOfDifference++; 
           System.out.println("equal occured at index : " + i +" : "+ a[i] + "\t " + b[i])); 
          } 
         } 
    
        }