比较数组时ArrayIndexOutOfBoundsException

时间:2015-03-06 04:34:27

标签: java arrays indexoutofboundsexception

每当我尝试运行此方法来比较数组时,我总会得到一个ArrayIndexOutOfBoundsException。我做错了什么?

public static boolean areIdentical(int[] m, int[] n) {
   //write a loop that compares each individual element of the two arrays.
   //if a mismatch is found, return false
   boolean identical = false;
   for(int x = 0; m.length > x || n.length > x; x++) {
     if(m[x] == n[x]) {
       identical = true; 
     } else {
       identical = false;  
     }
   }
   return identical;
}

3 个答案:

答案 0 :(得分:2)

问题是,您正在使用析取OR。这意味着只要您的索引在至少一个数组的范围内,它就会尝试访问它。

您应该将条件更改为:

m.length > x && n.length > x

或者,更好的是,请事先检查它们的长度是否相同。如果他们不是,那么他们就不一样了。但是,我不知道这里的完整程序要求,所以这可能不是预期的行为。

if(m.length != n.length){
    return false;
}
boolean identical = false; 
//...

答案 1 :(得分:1)

首先尝试比较两个数组的.length,看它们是否相等。如果没有,则它们不相同。

如果长度相同,请尝试将for循环更改为此类

boolean identical = true;
if(m.length() != n.length()) identical = false;
if(identical)
{
 for(int x = 0; x < m.length(); x++)
 {
   if(m[x] != n[x])
   { 
     identical = false;
   }
 }
}
return identical;

此代码应该可以工作,因为您似乎只是在寻找任何不匹配的错误

答案 2 :(得分:0)

你可以先做一件事来计算小数组的长度。

public static boolean areIdentical(int[] m, int[] n)
{

    int length;
    if(m.length<n.length){
        length=m.length
    }else{
        length=n.length;
    }
   boolean identical = false;
    for(int x = 0; x<length; x++){

     if(m[x] == n[x]){
       identical = true; 
        break;
     }
     else
     {
      identical = false;  
      }
   }

    //write a loop that compares each individual element of the two arrays.
    //if a mismatch is found, return false

    return identical;
}

早期计算长度的好处是你不需要做&amp;&amp;或||对于每次迭代。当你发现它们相同时使用break会保存你的迭代。

但是你的评论说你需要检查两个数组的单个元素我猜你需要使用2 for循环: -

boolean identical = false;
    for(int x = 0; x<n.length; x++){
        for(int y=0;y<m.length;y++){

             if(m[y] == n[x]){
               identical = true; 
               break;
             }
           }
           }
return identical;