新手问题望深度解析迫切 目前初学卡在这里了

树上很危险 2013-01-24 11:18:59
public class TestDateSort {
public static void main(String[] args) {
Date[] days = new Date[5];
days[0] = new Date(2006, 5, 4);
days[1] = new Date(2006, 7, 4);
days[2] = new Date(2008, 5, 4);
days[3] = new Date(2004, 5, 9);
days[4] = new Date(2004, 5, 4);

Date d = new Date(2006, 7, 4);
String str = String.valueOf(d);
//str = d.toString();
bubbleSort(days);

for(int i=0; i<days.length; i++) {
System.out.println(days[i]);
}

System.out.println(binarySearch(days, d));
}

public static Date[] bubbleSort(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;
}
}
}
return a;
}

public static int binarySearch(Date[] days, Date d) {
if (days.length==0) return -1;

int startPos = 0;
int endPos = days.length-1;
int m = (startPos + endPos) / 2;
while(startPos <= endPos){
if(d.compare(days[m]) == 0) return m;
if(d.compare(days[m]) > 0) {
startPos = m + 1;
}
if(d.compare(days[m]) < 0) {
endPos = m -1;
}
m = (startPos + endPos) / 2;
}
return -1;
}
}

class Date {
int year, month, day;

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

public int compare(Date 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 String toString() {
return "Year:Month:Day -- " + year + "-" + month + "-" + day;
}
}

虽然在各位严重也许是很基础的东西但是对于新手来说还是有点迷糊 之前发过帖子 没有贴全部代码 希望这次大哥大姐能给个深度解析 现在正在看数组算法的部分 看的很乱 有点不明白
...全文
213 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xtfgy2012 2013-01-25
  • 打赏
  • 举报
回复
唯一的一点想要用二分查找,就必须先排序! 说得有点问题,如果数组本来就是有序的,就不需要排了,当然排序的话 也并不一定需要自己排,对于绝大多数的数据,用java自身提供的对数组排序的功能 就能满足,当然查找java也提供了
xtfgy2012 2013-01-25
  • 打赏
  • 举报
回复
这不就是个二分查找的例子嘛。 看看二分查找算法,理解它就完啦,只不过你这里是用日期来比较而已 如果你只是为了学算法,这个例子就不合适,应该找个int类型的数组来学下 网上很多这样的例子。而且二分查找思路非常简单,算法也简单,唯一的一点 想要用二分查找,就必须先排序!所以我们还得学习排序的算法,呵呵~~~~ 慢慢来吧
abc41106 2013-01-25
  • 打赏
  • 举报
回复
看着很乱的话,就加个断点单步调试,跟着程序一步一步走,走一遍就不乱了。
public class TestDateSort {
	public static void main(String[] args) {
		Date[] days = new Date[5];
		days[0] = new Date(2006, 5, 4);
		days[1] = new Date(2006, 7, 4);
		days[2] = new Date(2008, 5, 4);
		days[3] = new Date(2004, 5, 9);
		days[4] = new Date(2004, 5, 4);

		Date d = new Date(2006, 7, 4);
		String str = String.valueOf(d);
		// str = d.toString();
		bubbleSort(days);

		for (int i = 0; i < days.length; i++) {
			System.out.println(days[i]);
		}

		System.out.println(binarySearch(days, d));
	}

	public static Date[] bubbleSort(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;
				}
			}
		}
		return a;
	}

	public static int binarySearch(Date[] days, Date d) {//二分查找
		if (days.length == 0)
			return -1;

		int startPos = 0;
		int endPos = days.length - 1;
		int m = (startPos + endPos) / 2;
		while (startPos <= endPos) {
			if (d.compare(days[m]) == 0)
				return m;
			if (d.compare(days[m]) > 0) {
				startPos = m + 1;
			}
			if (d.compare(days[m]) < 0) {
				endPos = m - 1;
			}
			m = (startPos + endPos) / 2;
		}
		return -1;
	}
}

class Date {
	int year, month, day;

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

	public int compare(Date date) {//我估计你感觉乱的地方应该是这里,这其实就是比较两个Date的大小的方法,前者大就返回1,小就返回-1,相等就返回0
		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;
		//等价于:
		/*if (year > date.year)//先比较年
			return 1;
		else if (year < date.year)
			return -1;
		else if (month > date.month)//年相等,再比较月
			return 1;
		else if (month < date.month)
			return -1;
		else if (day > date.day)//月也相等,在比较日
			return 1;
		else if (day < date.day)
			return -1;
		else
			return 0;*/
	}

	public String toString() {
		return "Year:Month:Day -- " + year + "-" + month + "-" + day;
	}
}
  • 打赏
  • 举报
回复
建议写代码加点注释,这样更加深理解,我感觉对我们这种新手很有帮助,有一位老师曾让我写一行代码就要写一行注释,写不出来注释就说明对自己写的东西不是很明白,我感觉有用,你可以试试不要怕麻烦或者慢,你会有意想不到的收获
程序媛小李 2013-01-24
  • 打赏
  • 举报
回复
你的问题是什么?解释这段代码?

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧