我正在尝试使用下面的代码根据年龄从最小到最大重新排列我的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-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 该算法使用整数数组运行顺利,但在这里,我得到了这个错误.
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; }难道我做错了什么?或者是否有另一种根据特定变量排列对象数组的方法?
1> MTCoster..:如果你制作
Person
工具Comparable
,你可以用来Arrays.sort(...)
为你做这个!public class Person implements Comparable{ // Existing class implementation @Override public int compareTo(Person p) { return p2.age - this.age; } } 编辑:或者,您可以
compareTo
在Arrays.sort()
调用时直接实现您的方法(即:不需要修改Person
):Arrays.sort(personArray, new Comparator() { @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);