如果我用这个数据初始化一个人物对象数组
myPeople[0] = new Person("Alice", "Foo", 22 );
myPeople[1] = new Person("Alice", "Foo", 22 );
myPeople[2] = new Person("Bob", "Bar", 2);
myPeople[3] = new Person("Joe", "Blogs", 64);
myPeople[4] = new Person("Jane", "Joe", 42);
我希望我的方法返回重复数量。在这种情况下,它将是2,因为人0和1是彼此的共同体。如果我要将对象2更改为相同它应该返回3.此时我的方法返回1,两个重复,4个,三个。
有问题的方法:
public static int searchForClones(Person[] array){
int numberOfClones=0;
for(int j =0; j<array.length-1; j++)
{
String tmp1 = array[j].getFirstName(); //Store first element of the array in tmp so it can be compared
String tmp3 = array[j].getLastName();
for(int i = 0; i<array.length-1; i++) //Loop to compare for every element in the array
{
String tmp2 = array[i].getFirstName(); //Do the same for the next element
String tmp4 = array[i].getLastName();
if(i!=j) //If i an j aren't the same element
{
if(tmp1.equals(tmp2) && tmp3.equals(tmp4) //and if they match
&& array[i].getAge()==array[i+1].getAge())
{
numberOfClones++; //increment the number of clones
}
}
}
}
return numberOfClones;
}
我真的很感激任何帮助,因为我认为唯一的问题是我增加克隆数量的方式。也许我需要检查一下并在那之后用适当的数字增加?
答案 0 :(得分:3)
有一种方式:
public static int searchForClones(Person[] array){
if(array == null || array.length == 0) return 0;
return array.length - new HashSet(Arrays.asList(array)).size();
}
与往常一样,请确保实现正确实现Person对象的equals
和hashCode
方法。
答案 1 :(得分:0)
您的第二个for
应该从j+1
开始,或者您将比较同一对元素两次,例如j=0
和i=1
,第二次{ {1}}和j=1
。
将第二个for循环的条件更改为i=0
,否则您将跳过最后一个元素
更改
i<array.length
到
array[i].getAge()==array[i+1].getAge()
因为你想比较第一次迭代的元素和第二次迭代的元素,而不是“邻居”元素。
另请记住,此方法将返回相同元素对的数量,而不是相同元素的数量。
要计算相同元素的数量,您可能应该先对数组进行排序,使相同的元素彼此靠近,然后遍历该数组,并且每对第X对元素增加2,因为有两个相同的元素),对于每一对X元素,将计数器增加1(现在只有一个新元素)。
答案 2 :(得分:0)
public static int searchForClones(Person[] array)
{
int numberOfClones = 0;
for(int i=0; i<array.length-1; i++)
{
for(int j=i+1; j<array.length; j++)
{
if(array[i].getFirstName().equals(array[j].getFirstName())
&& array[i].getLastName().equals(array[j].getLastName())
&& array[i].getAge() == array[j].getAge()) )
{
numberOfClones++;
}
}
}
return numberOfClones > 0 ? ++numberOfClones : 0; // To count the one which was duplicate of itself (as per your comment)
}
用上述程序
输入:
myPeople[0] = new Person("Alice", "Foo", 22 );
myPeople[1] = new Person("Alice", "Foo", 22 );
myPeople[2] = new Person("Bob", "Bar", 2);
myPeople[3] = new Person("Joe", "Blogs", 64);
myPeople[4] = new Person("Jane", "Joe", 42);
输出: 2
但如果输入是:
myPeople[0] = new Person("Alice", "Foo", 22 );
myPeople[1] = new Person("Alice", "Foo", 22 );
myPeople[2] = new Person("Bob", "Bar", 2);
myPeople[3] = new Person("Joe", "Blogs", 64);
myPeople[3] = new Person("Joe", "Blogs", 64);
你怎么看待伯爵?