2012-02-17 6 views
0

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

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

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

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

Мне нужно, чтобы иметь возможность сортировать его по идентификатору, возрасту, и в 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); 
} 

ответ

0

Как сказал @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

Спасибо! Я попробую. :) –

0

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