public class TestFinal{
public static void main(String[] args){
Date[] dd = new Date[5];
dd[0] = new Date(2004, 10, 5);
dd[1] = new Date(2004, 5, 15);
dd[2] = new Date(2007, 1, 3);
dd[3] = new Date(2006, 11, 8);
dd[4] = new Date(2001, 1, 5);

select(dd);
print(dd);

}

static void select(Date[] a){
int len = a.length;
for(int i=len-1; i>=1; i--){
for(int j=0; j<=i-1; j++){
if(a[j].compare(a[j+1]) > 0) {
Date temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}

static void print(Date[] a){
for(int i=0; i<a.length; i++){
System.out.println(a[i]);
}
}
}class Date{
int year, month, day;
Date(int y, int m, int d){
year = y;
month = m;
day = d;
}

void get(){
System.out.println("haha");
}

int compare(Date a){
return year > a.year ? 1
       :year < a.year ? -1
       :month > a.month ? 1
       :month < a.month ? -1
       :day > a.day ? 1
       :day < a.day ? -1 : 0 ;
}

public String toString(){
return year+" "+month+" "+day ;
}
}加了红色那一句中,请问compare方法是定义在Date 的类中,为什么可以用数组a[j]调用呢?? 还有此方法参数类型是Date类的对象,为什么传递的可以是数组a[j+1]呢?? 谢谢了..

解决方案 »

  1. “加了红色那一句中,请问compare方法是定义在Date 的类中,为什么可以用数组a[j]调用呢??”
    请看看你的源代码里面的这句,红色的~~~
    static void select(Date[] a) {
    int len = a.length;
    for (int i = len - 1; i >= 1; i--) {
    for (int j = 0; j <= i - 1; j++) {
    if (a[j].compare(a[j + 1]) > 0) {
    Date temp = a[j];
    a[j] = a[j + 1];
    a[j + 1] = temp;
    }
    }
    }
    }
    现在明白了么?
    关于第二个问题,那是因为你定义的对象是Date[],也就是说是Date类的数组我是刚学的,只是说说自己的理解,请高手指教~~
      

  2. 因为已经在compare方法是定义的参数Date 的类型,而a[j]也是定义为date类型数组,当然可以调用拉~~
      

  3. static void select(Date[] a){ 
    int len = a.length; 
    for(int i=len-1; i>=1; i--){ 
    for(int j=0; j <=i-1; j++){ 
    if(a[j].compare(a[j+1]) > 0) { 
    Date temp = a[j]; 
    a[j] = a[j+1]; 
    a[j+1] = temp; 




    如果红色部分这么写 (Date) a[j] .(Date)compare a[j+1]  是否能看的清楚些。
    传递的是Date 类的数组对象呵。
      

  4. 你的dd是用Data定义的 所以能用数组来调用
    因为你的a【j+1】也是Data类型的 你自己定义的呀
    Date[] dd = new Date[5]; 
      

  5. 是喔``  感谢各位``  接触java不久,, 有点混乱  和和``
      

类似问题 »