我有以下问题。 我需要实现一个方法来比较两个数组,并找到给定数组的元素不匹配的第一个索引。 我尝试过以下代码,但它有点弱:
public int UnmatchedElementsOnIndex(int[] x, int[] y) {
for (int i = 0; i < x.length; i++) {
for (int j = 0; j < y.length; j++) {
if (x[i] == y[j]) {
// value is contained in both arrays
}
// otherwise not
}
return 0;
}
答案 0 :(得分:0)
试试这个:
public int UnmatchedElementsOnIndex(int[] x, int[] y) {
// Also check for the list length
if(x.length < y.length)
return x.length;
else if(y.length < x.length)
return y.length;
for (int i = 0; i < x.length; i++) {
if(x[i] != y[i]) return i;
}
return -1;
}
如果两个数组中的所有元素相同,则返回-1,否则当数组在同一位置不包含相同元素时返回第一个索引。
答案 1 :(得分:0)
您只需要扫描数组中的每个元素。然后确定哪个元素不匹配。以下是实现此目的的一种方法。
public int UnmatchedElementsOnIndex(int[] x, int[] y) {
int index=-1;
//lengths should be equal. If not, we can't compare arrays
if(x.length!=y.length){
return -2;
}
for (int i = 0; i < x.length; i++) {
if (x[i] != y[i]) {
index=i;
break;
}
}
//returns -1, if all the elements are equal
return index;
}
答案 2 :(得分:0)
首先:有几种方法可以做到。
假设您要比较两个int [],您可以像这样缩短代码:
public static int getDifferIndex(int[] a, int[] b) {
int i = 0;
while (i < a.length && i < b.length && a[i] == b[i++]);
return i;
}
在此处试试:https://ideone.com/zl0Hji
假设您需要一个更通用的解决方案,该解决方案适用于实现boolean equals(Object)
的对象,您可以将其重写为以下内容:
public static int getDifferIndex(Object[] a, Object[] b) {
int i = 0;
while (i < a.length && i < b.length && a[i].equals(b[i++]));
return i;
}
答案 3 :(得分:-1)
public int UnmatchedElementsOnIndex(int[] x, int[] y) {
for (int i = 0; i < x.length && i < y.length; i++) {
if (x[i] != y[i]) {
return i;
}
return -1;
}
}