好的,我们开始吧。抽象数据类型,按列表中的特定变量对对象进行排序
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奇观当输入字符串:
我在sortedArrayList,它有一个add方法看起来像这样的形式做出了ADT。然而,我想以字符串的形式将对象添加到列表中,而对象包含4个变量(String Country,String name,int age,int CPR)。我希望Person对象按年龄排序。
这里是Person类和compareTo方法的排序。
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'而不是手动排序列表? – Chronicle 2014-09-10 19:13:37
我们可以看到错误排序的数组如何看起来像其中的几个人? – MirMasej 2014-09-10 19:14:08
@MirMasej是的,我会做一个编辑,告诉你我添加了什么以及它的输出。 – Alexandermeyeer 2014-09-10 19:16:52