比较java中的两个数组并返回相等数

时间:2013-09-27 11:56:41

标签: java arrays compare

我正在编写一个小函数,该函数应该返回一个数组的项目与另一个数组完全在同一个位置上的数量,以及有多少项但是位于不同的位置。

该功能目前如下所示:

public static int[] numCorrects(char[] leftarray, char[] rightarray){
    int counter[] = new int[2];
    counter[0] = 0;
    counter[1] = 0;

    for (int i = 0; i < leftarray.length; i++) {
        if(leftarray[i]==rightarray[i]) counter[0]++;
        else {
            for (int n = 0; n < leftarray.length; n++) {
                if (leftarray[i] == rightarray[n] && leftarray[n] != rightarray[n]) {
                    counter[1]++;
                    break;
                }
            }
        }
    }
    return counter;
}

如果我可以说leftarray (1, 2, 3, 4)rightarray (4, 3, 2, 2)

它返回(0, 3)(0完全匹配,3但不同位置)

但现在问题是:

如果我将输入与leftarray的{​​{1}}和(4, 3, 2, 2)的{​​{1}}进行交换,则输出为rightarray这是错误的(应该与第一个)

希望有人能帮助我。 THX

4 个答案:

答案 0 :(得分:1)

您必须决定如何处理重复的元素。这就是造成这种差异的原因。重复2意味着当交换数组时,“不同位置”计数器会递增两次。

答案 1 :(得分:0)

试试这个:

public static int[] numCorrects(char[] leftarray, char[] rightarray){
    int counter[] = new int[2];
    counter[0] = 0;
    counter[1] = 0;
    boolean taken[] = new boolean[rightarray.length];
    for (int i=0;i<taken.length;i++)
        taken[i] = false;

    for (int i = 0; i < leftarray.length; i++) {
        if(leftarray[i]==rightarray[i]){ counter[0]++; taken[i] = true; }
        else {
            for (int n = 0; n < leftarray.length; n++) {
                if (leftarray[i] == rightarray[n] && leftarray[n] != rightarray[n] && !taken[n]) {
                    taken[n] = true;
                    counter[1]++;
                    break;
                }
            }
        }
    }
    return counter;
}

答案 2 :(得分:0)

删除休息时间,你会得到相同的结果。

答案 3 :(得分:0)

public static int[] numCorrects(char[] leftarray, char[] rightarray){
    int counter[] = new int[2];
    counter[0] = 0;
    counter[1] = 0;
    boolean taken[] = new boolean[rightarray.length];
    for (int i=0;i<taken.length;i++)
        taken[i] = false;

    for (int i = 0; i < leftarray.length; i++) {
        if(leftarray[i]==rightarray[i])
        {
            counter[0]++;
            taken[i]=true;
        }
    }

    for (int i = 0; i < leftarray.length; i++)
    {
        if (!taken[i])
        {
            for (int j = 0; j < rightarray.length; j++) {
                if (leftarray[i] == rightarray[j] && i!=j && !taken[j]) { // you can remove i!=j because its already don't apply because of !taken[i]
                    taken[j] = true;
                    counter[1]++;
                    break;
                }
            }
        }
    }
    return counter;
}