我们有一个正在进行的期末考试,这是一个只是一个研究问题,但是当我把它们放入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;
}
}
}
答案 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...
循环。有很多方法可以做到这一点,但我最喜欢的是:
声明boolean
变量found
。在通过false
之前,您会将其初始化为array2
。
在break
之前,请设置found = true;
,以表明在array1
中找到array2
中的元素X。
完成array2
后,请检查found
。如果是false
,那么您知道整个函数应该返回false
。
此外,您的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;
}