本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

在 Java 中比较两个数组并返回相等的数量

发布于2024-11-02 21:02     阅读(973)     评论(0)     点赞(10)     收藏(5)


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

该函数目前如下所示:

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(4, 3, 2, 2)rightarray错误的(应该与第一个相同)(1, 2, 3, 4)(0, 4)

希望有人能帮助我。谢谢


解决方案


试试这个:

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;
}


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/691847/1835538b9e381a50a680/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

10 0
收藏该文
已收藏

评论内容:(最多支持255个字符)