你如何只计算两个阵列中的一个中的数字?
示例:countdifference([2,4,4,4,4,6,6,8],[3,4,6,6,9])返回4因为4和6是重复的,剩下的数字是2 ,8,3和9。
noOfRepeatsCount方法旨在考虑arrayB中的重复元素:即6
我得到一个超出范围的索引数组异常:-1为noOfRepeatsCount方法。有什么想法吗?
public class countNonRepeated {
static int countDifference(int[] arrayA, int[] arrayB) {
int count = 0, repeatCount = 0, noOfRepeatsCount = 0;
/*
int noOfRepeats = 0;
for (int k = 0; k < arrayB.length; k++) {
if (arrayB[k] == arrayB[k - 1]) {
noOfRepeats++;
} else {
continue;
}
*/
for (int i = 0; i < arrayA.length; i++) {
for (int j = 0; j < arrayB.length; j++) {
if (arrayA[i] == arrayB[j]) {
if (arrayA[i + 1] == arrayB[j]) {
repeatCount++;
} else {
count++;
}
} else {
continue;
}
}
}
int length = arrayA.length + arrayB.length;
return length - (noOfRepeatsCount * repeatCount) - (count * 2);
}
static int noOfRepeatsCount(int[] arrayB) {
int noOfRepeats = 0;
for (int k = 0; k < arrayB.length; k++) {
if (arrayB[k] == arrayB[k - 1]) {
noOfRepeats++;
} else {
continue;
}
}
return noOfRepeats;
}
public static void main(String args[]) {
int arrayA[] = { 2, 4, 4, 4, 4, 6, 6, 8 };
int arrayB[] = { 3, 4, 6, 6, 9 };
// System.out.println(noOfRepeatsCount(arrayA));
System.out.println(countDifference(arrayA, arrayB));
}
}
答案 0 :(得分:0)
请参阅noOfRepeatsCount
方法中的for循环。 if (arrayB[k] == arrayB[k - 1])
发生异常错误。由于初始k
值为0,因此您可以访问arrayB[-1]
。
如果您想解决此问题,请将for (int k = 0; k < arrayB.length; k++)
更改为for (int k = 1; k < arrayB.length; k++)
。
答案 1 :(得分:0)
如何将数组转换为Sets并使用removeAll(),addAll()和size()的组合来获得所需的结果。我想这会使算法更清晰,避免出现一个错误。
我现在没时间发布代码示例,抱歉。