每当我尝试运行此方法来比较数组时,我总会得到一个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;
}
答案 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;