两个不同大小的Array之间的比较索引与索引匹配

时间:2016-11-23 06:50:39

标签: java arrays

我有两个不同大小的数组。 情景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具有空值。

6 个答案:

答案 0 :(得分: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]);
}

答案 1 :(得分: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++; 
 }

答案 2 :(得分: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)

答案 3 :(得分:0)

您可以尝试使用较短数组的长度作为最大值来迭代数组。

例如:

....
private boolean isLastPageSwiped;
private int counterPageScroll;
....

这应该为一个选项执行Job,现在我想你可以扭转这个实现,为A长于B的情况添加相同的选项。

希望这是有帮助的!

答案 4 :(得分: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]); } }

答案 5 :(得分:0)

  1. 在那里,您可以使用数组列表但是如果您坚持使用数组 这是我的解决方案:

    //你有两个数组:&#34; a []&#34;和&#34; b []&#34;

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