在两个数组中查找匹配的数字

时间:2014-10-29 03:24:52

标签: java arrays oop

嘿我正在尝试编写一个比较两个数组的方法,并返回它们共有的值的数量。

例如,如果有两个数组:

arr{0,4,2,5} 
arr1{0,7,4,4}

然后该方法将返回2.

这是我到目前为止所做的:

public int numDigitsCorrect(Permutation other) {
    int c=0;
    for(int i=0; i<nums.length; i++) {
        for(int x=0; x<nums.length;x++) {
            if(nums[i]==other.nums[x]) {
                System.out.println(nums[i] + " " + other.nums[x] + " ");               
                c++;
            }
        }
    }
    return c;
}

2 个答案:

答案 0 :(得分:0)

如果您使用Set,它将更加清晰和可读。这也会降低代码的复杂性。

像:

import java.util.HashSet;
import java.util.Set;

public class NumberMatch {

    public static void main(String[] args) {
        int[] arrOne = { 0, 4, 2, 5 };
        int[] arrTwo = { 0, 7, 4, 4 };

        System.out.println(numDigitsCorrect(arrOne, arrTwo));
        System.out.println(numDigitsCorrect(arrTwo, arrOne));
        System.out.println(numDigitsCorrect(arrOne, arrOne));
        System.out.println(numDigitsCorrect(arrTwo, arrTwo));
    }

    public static int numDigitsCorrect(int[] arrOne, int[] arrTwo) {
        Set<Integer> setOne = arrayToSet(arrOne);
        Set<Integer> setTwo = arrayToSet(arrTwo);

        setOne.retainAll(setTwo);

        return setOne.size();
    }

    private static Set<Integer> arrayToSet(int[] array) {
        Set<Integer> retSet = new HashSet<Integer>();

        for (int i : array) {
            retSet.add(i);
        }
        return retSet;
    }
}

输出:

2
2
4
3

答案 1 :(得分:0)

您需要更改当前功能,如下所述:

public int numDigitsCorrect(Permutation other)  
{
    int c=0;
    for(int i=0; i<nums.length; i++) {
        for(int x=0; x<other.length;x++) {
           if(nums[i]==other[x]) {
               System.out.println(nums[i] + " " + other[x] + " ");               
               c++;
           }
       }
   }
   return c;
}

我假设numsother是你的int数组,如下所示

int[] nums = {0,4,2,5}; 
int[] other = {0,7,4,4};