我正在尝试使用下面的代码根据年龄从最小到最大重新排列我的 Person 数组。
public class Trial {
public static void main(String[] args){
Person[] person = new Person[3];
person[0] = new Person("Jerome", 21);
person[1] = new Person("Jam", 16);
person[2] = new Person("Imelda", 53);
for(int i=0; i<person.length;i++){
System.out.println(person[i].getName() + " " + person[i].getAge());
}
String name = "";
int age = 0;
int counter = 0;
for(int i=1;i<person.length;i++){
name = person[i].getName();
age = person[i].getAge();
counter = i - 1;
while(i>-1&&person[counter].getAge()>age){
person[counter+1].setAge(person[counter].getAge());
person[counter+1].setName(person[counter].getName());
counter -= 1;
}
person[counter+1].setAge(age);
person[counter+1].setName(name);
}
for(int i=0; i<person.length;i++){
System.out.println(person[i].getName() + " " + person[i].getAge());
}
}
}
该算法可以顺利地处理整数数组,但在这里,我收到此错误。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at com.example.java.Trial.main(Trial.java:28)
这就是错误所在
while(i>-1&&person[counter].getAge()>age){
person[counter+1].setAge(person[counter].getAge());
person[counter+1].setName(person[counter].getName());
counter -= 1;
}
我做错了什么吗?或者是否有另一种根据特定变量排列对象数组的方法?
最佳答案
如果您让 Person
实现 Comparable
,您可以使用 Arrays.sort(...)
来为您完成此操作!
public class Person implements Comparable<Person> {
// Existing class implementation
@Override
public int compareTo(Person p) {
return p2.age - this.age;
}
}
编辑:或者,您可以在调用 Arrays.sort()
时直接内联实现 compareTo
方法(即:不修改人
为必填项):
Arrays.sort(personArray, new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
return p2.age - p1.age;
}
});
如果您运行的是 Java 8,则可以使用 lambda 表达式进一步缩短:
Arrays.sort(personArray, (p1, p2) -> p2.age - p1.age);
关于java - 重新排列数组 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34291982/