【发布时间】:2014-09-10 19:02:51
【问题描述】:
好的,我们开始吧。
我以 sortedArrayList 的形式创建了一个 ADT,它的 add 方法如下所示:
public boolean addToArray(T i)
{
int insertPlace = 0;
for(int j=0;j<size;j++)
{
if(i.compareTo(sortedArray[j])<0)
{
insertPlace =j;
j = size;
}
}
if(size>0)
{
for(int w=size-1; w>=insertPlace;w--)
{
sortedArray[size]=sortedArray[w];
}
sortedArray[insertPlace]=i;
}
else
{
sortedArray[0]=i;
}
size++;
return true;
}
现在,当输入是字符串时,这对我的排序 ADT 产生了奇迹。但是,我想将对象添加到 Persons 形状的列表中,而不是字符串,该对象包含 4 个变量(字符串国家、字符串名称、整数年龄、整数 CPR)。我希望 Person 对象按年龄在列表中排序。
这是带有用于排序的 compareTo 方法的 Person 类。
public class Person implements Comparable<Person>
{
int cpr=200193;
int age=21;
String name="John Doe";
String Country="Uzbekistan";
public Person() {
this.cpr=cpr;
this.age=age;
}
public Person(String name, String Country,int cpr,int age)
{
this.cpr=cpr;
this.age=age;
this.name=name;
this.Country=Country;
}
@Override
public String toString()
{
return "Person [Country= " + Country + ", Name:" + name + ", Cpr: "+cpr+ ", age: "+age+"]";
}
public int compareTo(Person p)
{
int before=-1;
int after=1;
int middle=0;
if(this.age!=p.age)
{
if(this.age>p.age)
{
return before;
}
if(this.age<p.age)
{
return after;
}
}
return middle;
}
现在,问题是对象被排序了,因为它们出现的顺序与我调用它们到列表中的顺序不同。我只是不知道它们是如何排序的,以及如何使列表中的对象按年龄排序。
编辑
p1.addToArray(new Person());
p1.addToArray(new Person("Pete","Germany",111111,86));
p1.addToArray(new Person("John","Denmark",123456,75));
p1.addToArray(new Person("Michael Jackson", "America",112345,49));
输出:
Item: Person [Country= America, Name:Michael Jackson, Cpr: 112345, age: 49]
Item: Person [Country= Uzbekistan, Name:John Doe, Cpr: 200193, age: 21]
Item: Person [Country= Germany, Name:Pete, Cpr: 111111, age: 86]
Item: Person [Country= Denmark, Name:John, Cpr: 123456, age: 75]
【问题讨论】:
-
您可能会使用
return Integer.compare(this.age, p.age)而不是compareTo方法中的所有行,但这只是在您找到问题所在之后。您是否尝试过使用Collections.sort而不是手动对列表进行排序? -
我们能看到排序错误的数组中有多个人的样子吗?
-
@MirMasej 是的,我会进行编辑,向您展示我添加的内容以及它的输出。
-
@Chronicle Collections.sort 不幸不是一个选项。
标签: java list generics abstract comparable