Как передать значение массива объекта в метод - PullRequest
0 голосов
/ 17 февраля 2012

У меня быстрый и простой вопрос, на который я почему-то не смог найти ответ.

У меня есть метод quick_srt_int, который может сортировать целочисленный массив, однако моя проблема в том, что моймассив сформирован из объекта, и я хочу иметь возможность сортировать массив по определенному вспомогательному значению (пожалуйста, исправьте меня, как это называется).

Просто, чтобы дать вам некоторое представление о том, как выглядит массивобъявляется.

student[index] = new Person(name, id, age, gpa);

Мне нужно иметь возможность сортировать его по id, возрасту и gpa в разное время, но я не знаю, как передать значение.я предполагаю, что мне нужно было бы передать его так:

public void ageSort() {
    quick_srt_int(student[].age, 0, student[].age.length - 1);
}

Пожалуйста, покажите мне, как это сделать правильно.

Мне также нужно изменить метод быстрой сортировки для поддержки двойного типазначения, потому что gpa находится в двойной форме, и я не могу привести его к сортировке.

Любая помощь очень благодарна, большое спасибо.

Метод быстрой сортировки выглядит так:

public static void quick_srt_int(int array[], int low, int n) {
    int lo = low;
    int hi = n;
    if (lo >= n) {
        return;
    }
    int mid = array[(lo + hi) / 2];
    while (lo < hi) {
        while (lo < hi && array[lo] < mid) {
            lo++;
        }
        while (lo < hi && array[hi] > mid) {
            hi--;
        }
        if (lo < hi) {
            int T = array[lo];
            array[lo] = array[hi];
            array[hi] = T;
        }
    }
    if (hi < lo) {
        int T = hi;
        hi = lo;
        lo = T;
    }
    quick_srt_int(array, low, lo);
    quick_srt_int(array, lo == low ? lo + 1 : lo, n);
}

Ответы [ 3 ]

0 голосов
/ 17 февраля 2012

Ваш класс человек должен реализовать сопоставимый или компаратор. пример сортировки по id

0 голосов
/ 17 февраля 2012

Как сказал @Logan, вы должны использовать Comparator, или ваш класс Person должен реализовывать интерфейс Comparable. Я приведу вам пример:

public class Person implements Comparable {
    private String name;
    private int id;
    private int age;
    private int gpa;

    public Person(String name, int id, int age, int gpa) {
        this.name = name;
        this.id = id;
        this.age = age;
        this.gpa = gpa;
    }
    //getters and setters here...

    //logic for the comparison
    //NOTE: you can improve the comparison algorithm.
    public int compareTo (Person p) {
        //0 means both Person objects are equal.
        // > 0 means **this** object is greater than p object.
        // < 0 means **this** object is less than p object.
        int result = 0;
        //comparison by id
        if (this.id > p.id) {
            result = 1;
        } else {
            if (this.id < p.id) {
                result = -1;
            } else { //same id, check by age
                if (this.age > p.age) {
                    result = 1;
                } else {
                    if (this.age < p.age) {
                        result = -1;
                    } else { //same id and age, check by gpa
                        if (this.gpa > p.gpa) {
                            result = 1;
                        } else {
                            if (this.gpa < p.gpa) {
                                result = -1;
                            }
                        }
                    }
                }
            }
        }
    }
    return result;
}

А теперь отправьте массив Person в ваш метод быстрой сортировки:

public void ageSort() {
    quick_srt_int(student[], 0, student[].age.length - 1);
}

public static void quick_srt_int(Person array[], int low, int n) {
    //your logic...
}

Если вы хотите указать для этого функцию сравнения, вам нужно добавить параметр в вашу функцию quick_srt_int, чтобы установить класс, реализующий интерфейс Comparator.

0 голосов
/ 17 февраля 2012

Вы ищете Comparator.Вот пример, очень похожий на вашу проблему здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...