当前位置: 代码迷 >> Java相关 >> 冒泡排序的程序出错,我排了一下午,汗
  详细解决方案

冒泡排序的程序出错,我排了一下午,汗

热度:240   发布时间:2010-07-23 17:20:41.0
冒泡排序的程序出错,我排了一下午,汗
就是这个题了,我弄了一下午,一直没找到错在哪?无语

public class TestDateSort {
    public static void main(String[] args) {
     Date[] days = new Date[5];
     days[0] = new Date(2006, 1, 1);
     days[1] = new Date(2006, 1, 2);
     days[2] = new Date(2006, 1, 1);
     days[3] = new Date(2010, 2, 3);
     days[4] = new Date(2010, 2, 1);
     bubbleSort(days);
     for(int i = 0;i<days.length;i++)
     System.out.println(days[i]);
            }
            
public static Date[] bubbleSort(Date[] a) {
                int t= a.length;
                for(int i = t-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;
                            }
                        }
                    }
                    return a;
                }
    }
搜索更多相关的解决方案: 冒泡  

----------------解决方案--------------------------------------------------------
对着正确答案,一步一步的看,一模一样,还是错
----------------解决方案--------------------------------------------------------
程序代码:
import java.util.Date;

public class TestDateSort {
    public static void main(String[] args) {
        Date[] days = new Date[5];
        days[0] = new Date(2006, 1, 1);
        days[1] = new Date(2006, 1, 2);
        days[2] = new Date(2006, 1, 1);
        days[3] = new Date(2010, 2, 3);
        days[4] = new Date(2010, 2, 1);
        bubbleSort(days);
        for (int i = 0; i < days.length; i++)
            System.out.println(days[i].getYear() + "," + days[i].getMonth() + "," + days[i].getDay());
    }

    public static Date[] bubbleSort(Date[] a) {
        int t = a.length;
        for (int i = t - 1; i >= 1; i--) {
            for (int j = 0; j < i - 1; j++) {
                if (a[j].compareTo(a[j + 1]) > 0) {
                    Date temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }
        return a;
    }
}


----------------解决方案--------------------------------------------------------
回复 3楼 linjx0123
也不对,正确答案里没用包
----------------解决方案--------------------------------------------------------
答案是死的.人是活的.对不对....
总不可能少了个;号或少个边}你还是一定得按它说的写吧?
----------------解决方案--------------------------------------------------------
程序代码:
//import java.util.Date;

public class TestDateSort {
    public static void main(String[] args) {
        Date[] days = new Date[5];
        days[0] = new Date(2006, 1, 1);
        days[1] = new Date(2006, 1, 2);
        days[2] = new Date(2006, 1, 1);
        days[3] = new Date(2010, 2, 3);
        days[4] = new Date(2010, 2, 1);
        bubbleSort(days);
        for (int i = 0; i < days.length; i++)
            System.out.println(days[i]);
    }

    public static Date[] bubbleSort(Date[] a) {  //冒泡排序
        int t = a.length;
        boolean flag = true;
        for (int i = 0; i < t-1 && flag; i++) {
            flag = false;
            for (int j = 0; j < t-i-1; j++) {
                if (a[j].compareTo(a[j + 1]) > 0) {
                    Date temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                    flag = true;
                }
            }
        }
        return a;
    }
}

class Date implements Comparable  //自己写的Date类实现Comparable接口
{
    private int year;
    private int month;
    private int day;
    public Date() {
    }

    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public int compareTo(Object arg0) {   //重写compareTo方法
        Date date=(Date) arg0;  
        if(this.year!=date.year){
           if (this.year>date.year) return 1;
           else return -1;
        }else{
            if(this.month!=date.month){
                if(this.month>date.month)return 1;
                else return -1;
            }else{
                if(this.day>date.day)return 1;  
                else if(this.day<date.day)return -1;  
                else return 0;  
            }  
        }  
         
    }  
    public String toString() {   //重写toString方法
        return this.year+"-"+this.month+"-"+this.day;  
    }   


}


[ 本帖最后由 lampeter123 于 2010-7-24 09:02 编辑 ]
----------------解决方案--------------------------------------------------------
注意:TestDateSort.java 使用或覆盖了已过时的 API。
注意:要了解详细信息,请使用 -Xlint:deprecation 重新编译。
3楼的我一编译就这样,你们能通过?我用的jdk6.0
好像只有版主那样重写接口了
版主问个问题,能不能用别的类包来实现?不用重写的

[ 本帖最后由 yuanxl33 于 2010-7-25 04:52 编辑 ]
----------------解决方案--------------------------------------------------------
回复 6楼 lampeter123
能不能用别的包实现?重写太繁琐
----------------解决方案--------------------------------------------------------
我运行通过了~~用的是jdk6.5
----------------解决方案--------------------------------------------------------
有几个建议:
1.Date已经实现了comparable接口了,有了compareTo(Data otherData)方法,所以不必自己再去实现这个接口,直接使用就可以了。
2.如果仅仅是为了锻炼冒泡算法,倒是可以试试.如果是为了对一些日期进行排序就不用这么麻烦了,在Arrays这个类中,jdk已经帮我们实现了一下高效的排序算法了,就是sort(Object[] array)
----------------解决方案--------------------------------------------------------
  相关解决方案