//求1900年1月1日到2016年5月七日有多少天
public class days1 {
public static void main(String[] args){
int days=0;
for(int year=1900;year<=2015;year++){
if(year%4==0&&year%100!=0||year%400==0){
days+=366;
}else{
days+=365;
}
}//求出1900年1月1日到2015年12月31日的总天数
for(int month=1;month<=4;month++){ //判断月份 大月31天 二月判断29或者28天 小月30天
if(month%2==1||month==8){
days+=31;
}if(month==2){//这里我已经删掉了else提醒 多重if需要用else if
int years=2016;
if(years%4==0&&years%100!=0||years%400==0){
days+=29;
}else{
days+=28;
}
}else{
days+=30;
}
}//求出2016年1月到4月总天数
System.out.println("一共有"+(days+7)+"天");
}
}
各位老师大神好,我编写这段代码时 发现结果与预期不同 然后用debug发现在计算月份时,如1月份 if第一次判断加了31天
但是后来程序在else那里又加了个30天, 这里我就很迷惑了 我不是已经有一个条件判断,然后else不是应该属于我第一个
if判断条件以外的情况了吗 为什么还会自动加了30天???
我自己猜想判断我是少了else if 后面我加上结果运算正确, 但是不明白其中原理,所以贴出来让各位老师大神指教,谢谢!
顺便我想问问我这样判断月份是否正确合理? 谢谢
------解决思路----------------------
不加才怪,体会下以下区别
1、
过滤条件由小到大:
if (i>5) //i>5的被排除掉了
else if(i>3)//看上面眼色行事,被挖掉一部分了,剩下的3-5区间段被排除了
else //剩下都该如此这般了...
筛选式的,满足条件的就在某一个主体里被虑掉了
这个是一个整体
2、
if...//好吧,我先执行这个
if...//else不在,上面那个执行与否关我鸟事
else if...//我得排除我上面那个人运行了的
这个可以看成2个独立的整体,相互没关联的
好吧,玩完游戏出来扯扯淡
程序再第二个if前加else就对了
还有month==8这个条件永远都不可能达到,你看你的循环条件
------解决思路----------------------
用毫秒值计算如何?
Calendar c1900 = Calendar.getInstance();
c1900.set(1900, 0, 0);
Calendar c2016 = Calendar.getInstance();
c2016.set(2016, 4, 6);
long ms = c2016.getTimeInMillis() - c1900.getTimeInMillis();
long days = ms/1000/60/60/24;
System.out.println("days = "+days);//输出42495,对吗?
------解决思路----------------------
你的if判断哪里
if...if...else
else是跟着最近的一个if来判断的
分析一下你的代码:
当i=1也就是1月份的时候
if(month%2==1
------解决思路----------------------
month==8){ //我这里肯定执行,因为1%2==1所以day+=31;
days+=31;
}
if(month==2)//因为这里没用else if,所以还得进行判断,month == 1不等于2,所以这里不执行
int years=2016;
if(years%4==0&&years%100!=0
------解决思路----------------------
years%400==0){
days+=29;
}else{
days+=28;
}
}else{//既然if不执行了,那么我else一定执行了,所以又+=30
days+=30;
}