年糕先生 2015-04-24 17:10 采纳率: 0%
浏览 1939

自定义类的数组排序和查找问题(自定义Dates类)

 public class DateSort{
    public static void main(String[] args){
        Dates days[] = new Dates[10];
        days[0] = new Dates(2013,3,1);      // 初始化日期数组,任意赋值
        days[1] = new Dates(2014,3,1);
        days[2] = new Dates(2013,4,5);
        days[3] = new Dates(2014,5,28);
        days[4] = new Dates(2012,8,9);
        days[5] = new Dates(2001,12,11);
        days[6] = new Dates(2005,10,10);
        days[7] = new Dates(2008,8,8);
        days[8] = new Dates(2015,9,29);
        days[9] = new Dates(1992,1,1);

        Dates day = new Dates(2015,9,29);

        System.out.println("未排序");
        for(int i = 0;i<10;i++){            //输出数组,未排序
            days[i].display();
        }

        for(int i = 0;i < days.length;i++){
            for(int j = i+1;j < days.length;j++){
                if(days[i].compare(days[j]) == -1){
                    Dates d = days[i];
                    days[i] = days[j];
                    days[j] = d;
                }
            }
        }

        System.out.println("\n排序以后");

                for(int i = 0;i<10;i++){            //排好序,输出数组
            days[i].display();
        }


        //二分法查找特定Day 
        int start = 0;
        int end = days.length-1;
        int m = (start+end)/2;
        while(start<=end){
            if(days[m].compare(day) == 0){
                System.out.println("找到了与day相同的日期,下标i为:" + m);
                break;
            }
            if(days[m].compare(day) == 1){
                end = m-1;
            }
            if(days[m].compare(day) == -1){
                start = m+1;
            }
            m = (start+end)/2;  

            if(start == end && days[m].compare(day) != 0)
                System.out.println("No Found");
        }
    }
}

class Dates{
    int year,month,day;
    Dates(int y,int m,int d){
        year = y;
        month = m;
        day = d;
    }

    public int compare(Dates date){
        return year > date.year ? 1
                    :year < date.year ? -1
                    :month > date.month ? 1
                    :month < date.month ? -1
                    :day > date.day ? 1
                    :day < date.day ? -1 : 0;
    }

    public void display(){
        System.out.println(year + "-" + month + "-" + day);
    }

}

先new 一个day对象。然后用折半查找法在自定义的Dates数组中查找是否存在相同时间,若存在返回下标,不存在,打印No Found。

问题是:new了一个确实存在与days数组里的day对象。但是运行结果是No Found。
后来尝试着将排序的语句删掉,将原来的Dates数组的值,按顺序赋值。这样运行的结果是没问题的,都能查找到。

所以就不知道问题出在哪儿了!求大神指点一二

  • 写回答

3条回答 默认 最新

  • threenewbee 2015-04-24 17:14
    关注

    代码贴出来才好帮你看,一个图怎么编辑。

    评论

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向