返回true的两个一维整数数组

时间:2014-05-06 23:56:47

标签: java arrays

我们有一个正在进行的期末考试,这是一个只是一个研究问题,但是当我把它们放入eclipse时,我遇到了两个阵列的问题。我想要一些可以帮助我进行测试的见解,谢谢。


编写一个接受两个一维整数数组的Java函数,当且仅当第一个数组中的所有整数都包含在第二个数组中时,才返回true,第二个数组中的所有整数都包含在第一个数组中/ p>


public class Two1dimensionalArraysMain 
{
    public boolean main(int []array1, int []array2) 
    {
        for(int i=0;i<10;i++)
        {
            for(int j=0;j<10;j++)
            {

                    if(array1[i]==array2[j]) 
                    {
                        break;
                    }
                    else if (array1[i] != array2[j])
                        return false;

            }
        return true;
        }
    }
}

3 个答案:

答案 0 :(得分:0)

我认为最佳解决方案是使用集合相等,如果允许的话。

public static boolean checkArraysContainSameElements(int[] array1, int[] array2) { 
    Set<Integer> set1 = new HashSet<Integer>();
    for (int x : array1) set1.add(x);
    Set<Integer> set2 = new HashSet<Integer>();
    for (int x : array2) set2.add(x);
    return set1.equals(set2);

}

除此之外,我引用@ajb来了解您提出的解决方案有什么问题。

答案 1 :(得分:0)

问题是你太早回归false

这就是你想要做的事情。您可以查看array1中的每个元素X.然后将这一个元素与array2中的每个元素进行比较。如果X等于array2中的任何元素,那么你是好的(到目前为止),你可以查看array1中的下一个元素。但如果X与array2中的每个元素不同,则返回false

这是一个很好的方法。问题是,如果X与array2中的任何元素不同,则返回false,而不是与每个元素不同。这是因为只要您看到两个数组之间有两个不同的元素,就会立即返回false

public boolean main(int []array1, int []array2) 
{
    for(int i=0;i<10;i++)
    {
        for(int j=0;j<10;j++)
        {
                if(array1[i]==array2[j]) 
                {
                    break;
                }
                else if (array1[i] != array2[j])
                    return false;
        }
    return true;
    }
}

要解决此问题,您需要执行return false检查外部 for (int j...循环。有很多方法可以做到这一点,但我最喜欢的是:

  1. 声明boolean变量found。在通过false之前,您会将其初始化为array2

  2. break之前,请设置found = true;,以表明在array1中找到array2中的元素X。

  3. 完成array2后,请检查found。如果是false,那么您知道整个函数应该返回false

  4. 此外,您的return true位置错误。如果你修复了这两件事,那么你的方法应该可行。

    编辑:我错过了平等必须有两种方式。根据我的建议,如果true中的每个元素都在array1中,则上述内容将返回array2,反之亦然。一个简单的更新是编写一个使用两个allElementsAreIn数组的辅助方法int[],然后调用它两次,如allElementsAreIn(array1,array2) && allElementsAreIn(array2,array1)

    顺便说一下,不要调用你的函数main。该名称只能用于主程序,主程序必须为void并且带有String[]参数。

    P.S。我假设练习的目的是学习循环等基础知识。在实际的生产环境中,使用Set就像在amit的答案中一样简单。

答案 2 :(得分:0)

您可以对数组进行排序并在循环中进行比较:

public boolean checkArrayEquality(int[] source, int[] target)
{
    Arrays.sort(source);
    Arrays.sort(target);

    if(source.length == target.length)
    {
        for (int i = 0; i < target.length; i++)
        {
            if(source[i] != target[i])
            {
                return false;
            }
        }
    }
    else
    {
        return false;
    }

    return true;
}