最近在学Java,三大面向对象语言c++,Java,c#各有各的优点,其实最重要的是面向对象的编程思想,掌握了思想,再学其他语言无非就是语法不同了,编程思想都是类似的。现在贴出一段程序,先用冒泡法对日期进行排序,然后用二分法查找日期。
public class lesson409 {
public static void main(String args []) {
Date [] day = new Date[8]; //定义一个数组,数组元素是Date对象
day[0] = new Date(2013,7,31);
day[1] = new Date(2012,12,12);
day[2] = new Date(1990,5,5);
day[3] = new Date(2020,8,8);
day[4] = new Date(1994,3,20);
day[5] = new Date(1994,3,15);
day[6] = new Date(1994,5,20);
day[7] = new Date(2012,3,12);
Date d = new Date(1994,3,20); //排序后需查找的一个日期
int len = day.length;
for(int i= 0;i<len;i++) {
System.out.print(day[i]);
}
range(day); //排序方法的调用
System.out.println("\n###########################");
for(int i= 0;i<len;i++) {
System.out.print(day[i]);
} //打印排好序后的日期
System.out.println("\nthe index is "+find(day,d));//打印查找得到的所在数组下标
}
public static int find(Date [] date,Date d) { //二分法查找
int n = date.length;
int startp = 0;
int endp = n-1;
int m = (startp+endp)/2;
while(startp<=endp) {
if(d.compare(date[m])==-1) {
endp=m-1;
}
else if(d.compare(date[m])==1) {
startp=m+1;
}
else if(d.compare(date[m])==0)
return m;
m=(startp+endp)/2;
}
return -1;
}
public static Date[] range(Date[] date) { //冒泡法排序
int n = date.length,flag;
do {
flag=0;
for(int i=0;i<n-1;i++) {
if( date[i].compare(date[i+1])==1) { //如果前一个日期比后一个大,则调换位置,第一轮会将最大的冒出来放到最后
Date temp = date[i];
date[i] = date[i+1];
date[i+1] = temp;
flag = 1;
}
}
}while(flag!=0); //如果没有位置调换说明排序结束了,那就跳出循环。
return date;
}
}
class Date { //定义了一个类,有3个成员年月日,还有compare方法的实现。
int year;
int month;
int day;
Date(int year,int month,int day) {
this.year = year;
this.month = month;
this.day = day;
}
int compare(Date date) {
/*
return year>date.year ? 1 : ( //没写成的条件语句
month>date.month ? 1 : (
day>date.day ? 1 : 0
)
);
*/
if(year>date.year) //这种写法有点啰嗦,可以换成上面这种条件语句。
return 1;
else if(year<date.year)
return -1;
else if((month>date.month)&&(year ==date.year))
return 1;
else if((month<date.month)&&(year ==date.year))
return -1;
else if((day>date.day)&&(year==date.year)&&(month==date.month))
return 1;
else if((day<date.day)&&(year==date.year)&&(month==date.month))
return -1;
else
return 0;
}
public String toString() { //因为要打印对象,所以可以重新实现toString方法。打印Date对象时会打印这个函数的返回值。
return "\nY-M-D:"+year+"-"+month+"-"+day;
}
}
运行结果如下,我是菜鸟,请各位多多指教。每天学一章。