当前位置:  开发笔记 > 编程语言 > 正文

重新排列数组 - java

如何解决《重新排列数组-java》经验,为你挑选了1个好方法。

我正在尝试使用下面的代码根据年龄从最小到最大重新排列我的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;
    }
}

编辑:或者,您可以compareToArrays.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);

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有