java初学问题!

来源:百度知道 编辑:UC知道 时间:2024/06/30 14:06:59
public class Date2
{int year,month,day;
public void setdate(int y,int m,int d)
{year=y;
month=m;
day=d;
}
void today()
{System.out.println("The date of today is "+year+"/"+month+"/"+day);}
boolean isleap(int y)
{return(y%4==0&y%100!=0)|y%400==0;}
void tomorrow()
{int d,m,y;
d=day+1;m=month;y=year;
if((d>28)&month==2)
{if(!isleap(year)|d>29)
{d=1;m=m+1;}}

else if(d>30&(month<7&month%2==0|month>7&month%2==1))
{d=1;m=m+1;
if(m==13){y=y+1;m=1;}}
System.out.println("The date of tommorrow is "+y+"/"+m+"/"+d);}
public static void main(String args[])
{Date2 de=new Date2();
de.setdate(2000,2,29);
if(de.isleap(de.year))System.out.println(de.year+" is a leap year");
de.today();
de.tomorrow();}

}
请问这一团是什么意思?
if((d>28)&month==2)
{if(!isleap(year)|d>2

首先,这个程序有个大问题,Java里判断AND条件要用&&,而不是&;判断OR条件要用||,而不是|。这个错了,所有逻辑都错了!

下面解答你的问题:

问题一:
注意这一团的前面一句
d=day+1;m=month;y=year;
d被加1了,也即日期变成了明天。如果是2月闰年,日期范围是1~29,那加上1天,范围就是2~30。if(!isleap(year)|d>29) 是说如果不是闰年或者d>29,(请注意是或者,而不是你说的而且),这样的话,说明到1个月的最后一天了,那要把日期置为1,月份加1。不是闰年d当然不会>29,是你把“或者”看成了“而且”。

问题二,问题三:
如果理解了问题一,问题二和问题三也解决了,源程序对三者都交代了。

这段代码如果不是你写的,我建议你不要去看了,好好静下心来理清思路自己写一段吧。这样才有提高。

第一个问题:if d加1后大于29且month是2的情况,显然是2月不能有29的,也就是说d必须更改为1,month为3月,就是month在2的基础上+1,里面的结构是为了更清楚,用了嵌套的IF结构句,你可以更改为:
if((d>28)&month==2&(!isleap(year)|d>29))
{d=1;m=m+1;}
或是干脆m=3;修改m=m+1;也行!

至于说后边两个不是问题,只要你明白上句,这么说吧,程序中的东西都是配合的,不是一句或是一段都能完成的,要下边的语句或是上边的函数配合,不要看局部,理解要站在全局的基础之上!