java - 重新排列数组 - java

标签 java arrays

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

相关文章:

java - 使用 Ant 生成逗号分隔的文件列表

java - 寻找正则表达式来将此电子邮件传递为有效

java - 原始数组和引用数组有什么区别。

python - 使用 numpy 数组计算累积最小值

java - [CompletionException : java. lang.RuntimeException : java. lang.reflect.InitationTargetException]

java - 滑动刷新覆盖在 webview 中滚动我的网页中的菜单

java - Tomcat webapps 服务器独立吗?

php - 将数组从 Controller 传递到 codeigniter 中的模型

javascript - 将 JS 对象(键和值)展平为单个深度数组的最佳方法

arrays - 如何使用 MongoDB 将对象 $addToSet 设置为数组并 $sort ?